Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -198,8 +198,9 @@ Always use temp file + atomic move to prevent corruption:
FILE=".claude/my-plugin.local.md"
NEW_VALUE="updated_value"

# Create temp file
TEMP_FILE="${FILE}.tmp.$$"
# Create secure temp file (unpredictable name)
TEMP_FILE=$(mktemp) || { echo "Failed to create temp file" >&2; exit 1; }
trap 'rm -f "$TEMP_FILE"' EXIT

# Update field using sed
sed "s/^field_name: .*/field_name: $NEW_VALUE/" "$FILE" > "$TEMP_FILE"
Expand All @@ -215,17 +216,17 @@ mv "$TEMP_FILE" "$FILE"
CURRENT=$(echo "$FRONTMATTER" | grep '^iteration:' | sed 's/iteration: *//')
NEXT=$((CURRENT + 1))

# Update file
TEMP_FILE="${FILE}.tmp.$$"
# Update file (secure temp file)
TEMP_FILE=$(mktemp) || exit 1
sed "s/^iteration: .*/iteration: $NEXT/" "$FILE" > "$TEMP_FILE"
mv "$TEMP_FILE" "$FILE"
```

### Update Multiple Fields

```bash
# Update several fields at once
TEMP_FILE="${FILE}.tmp.$$"
# Update several fields at once (secure temp file)
TEMP_FILE=$(mktemp) || exit 1

sed -e "s/^iteration: .*/iteration: $NEXT_ITERATION/" \
-e "s/^pr_number: .*/pr_number: $PR_NUMBER/" \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -200,8 +200,8 @@ NEXT_ITERATION=$((ITERATION + 1))
# Extract prompt from markdown body
PROMPT_TEXT=$(awk '/^---$/{i++; next} i>=2' "$RALPH_STATE_FILE")

# Update iteration counter
TEMP_FILE="${RALPH_STATE_FILE}.tmp.$$"
# Update iteration counter (secure temp file)
TEMP_FILE=$(mktemp) || exit 1
sed "s/^iteration: .*/iteration: $NEXT_ITERATION/" "$RALPH_STATE_FILE" > "$TEMP_FILE"
mv "$TEMP_FILE" "$RALPH_STATE_FILE"

Expand Down Expand Up @@ -292,12 +292,12 @@ enabled: true
Both use temp file + atomic move:

```bash
TEMP_FILE="${FILE}.tmp.$$"
TEMP_FILE=$(mktemp) || exit 1
sed "s/^field: .*/field: $NEW_VALUE/" "$FILE" > "$TEMP_FILE"
mv "$TEMP_FILE" "$FILE"
```

**Why:** Prevents corruption if process is interrupted.
**Why:** Prevents corruption if process is interrupted. Using `mktemp` creates a secure, unpredictable filename.

### 4. Quote Handling

Expand Down Expand Up @@ -355,8 +355,8 @@ echo "$VALUE"
# BAD: Can corrupt file if interrupted
sed -i "s/field: .*/field: $VALUE/" "$FILE"

# GOOD: Atomic
TEMP_FILE="${FILE}.tmp.$$"
# GOOD: Atomic with secure temp file
TEMP_FILE=$(mktemp) || exit 1
sed "s/field: .*/field: $VALUE/" "$FILE" > "$TEMP_FILE"
mv "$TEMP_FILE" "$FILE"
```
Expand Down
Loading