Theme / v0.9.73

Graphify

Codebase 知識圖譜

基礎觀念

v0.9.70~73:安全修復與 enum 擷取擴張

v0.9.69 → v0.9.73 的升級重點:Fortran 與 shell injection 安全修復、enum 成員擷取擴及四個語言、watch 的 Windows 序列化,以及各語言解析正確性。含互動測驗與升級檢查清單。

概述

涵蓋 v0.9.70 ~ v0.9.73(2026-09-27 ~ 09-30,四天四個 patch)。主軸有三:

  1. 安全修復 ×3(全在 v0.9.70)——Fortran 檔案讀取、shell injection 收尾、Terraform secret 涵蓋擴大
  2. enum 成員擷取擴及四個語言(v0.9.73)
  3. 各語言解析正確性的持續累積

三個安全修復(v0.9.70)

1. Fortran cpp 的任意檔案讀取(GHSA-pcc4-rvhr-2pr8)

攻擊面:Graphify 預處理大寫 F 的 Fortran 檔(.F / .F90)時會跑 cpp。舊版雖用了 -nostdinc -I /dev/null,但這擋不住絕對路徑 include:

      #include "/etc/passwd"

cpp 照樣解析並把檔案內容內聯進來——最終出現在 graph.json、報告與 LLM context(CWE-22/73/200)。

修復:預處理前剝除每一個 #include 指令,原始碼改由 stdin 餵給 cpp,宏展開保留。

2. Aider/Devin monolith --watch 的 shell injection 收尾

/graphify add … --watch 片段曾把 agent 代入的 INPUT_PATH 佔位符未加引號放進 shell 指令——scan root 含 $(…)、反引號或 ; 就會被執行。v0.9.68 修了 watch 片段;v0.9.70 收掉最後一個實例(Aider/Devin monolith --watch):watcher 改讀 Step 1 寫入的受信任 graphify-out/.graphify_root,路徑完全沒有被代入的機會。

3. Terraform secret redaction 擴大

秘密偵測過去看「key 名稱」,但這種寫法漏掉:

environment = [{ name = "DB_PASSWORD", value = "…" }]

敏感訊號在相鄰的 name 字面值而不是 key。現在 name/value pair 清單(含 ECS valueFrom)中,secret 命名 name 配對的 value 也會 redact。

隨堂測驗

Fortran 修復為什麼選擇「剝除 #include」而不是「檢查 include 路徑是否安全」?

💡 想先看個提示?

兩種修法都「能擋住 /etc/passwd」,但哪一種在面對未知的繞過手法時仍然安全?

enum 成員擷取擴張(v0.9.73)

enum 成員擷取在本版擴及以下四個語言,成員成為節點,透過 case_of 邊與 enum 相連:

語言 擷取內容
Rust enum variants
Zig enum members
C++ enum / enum class enumerators(含巢狀 enum)
Scala 3 enum cases 與其方法

這四個 patch 的其他語言結構新增:SQL CREATE TRIGGER(連到 ON 的表,含 OR REPLACE / INSTEAD OF / BEGIN…END 主體)與 Groovy enum(v0.9.71)、Blade @extends layout 連結(v0.9.72)、Solidity file-level free functions(v0.9.73)。

JSX 元件圖(v0.9.70):<MyButton/> 與 <_Row/> 產生 calls 邊連到元件;小寫 DOM 標籤與 <Nav.Item> 成員標籤保守跳過——React 元件圖現在捕捉 render 關係。

解析正確性精選

  • Java:呼叫繼承方法與 super.method() 解析到宣告祖先(走 inherits 鏈,最近者勝);未知或外部祖先 fail closed(v0.9.73)
  • VB.NET:MyModule.DoThing() 型別/模組限定呼叫解析到目標方法;value-receiver 與 MyBase. fail closed(v0.9.73)
  • R:R6::R6Class、methods::setRefClass 建立的類別被辨識;self$method() / private$method() 解析到同類方法(v0.9.71)
  • C#:具名 tuple (int Count, string Name) 的元素名不再誤記為型別引用(v0.9.70)
  • Kotlin:@Volatile var x = 0(註記 + 推斷型別)不再 crash 丟整檔(v0.9.72)
  • Astro:只有 frontmatter 與 <script> 餵給 AST,HTML template 不再產生 parse error,行號保留(v0.9.73)
  • PostgreSQL:DO $$ ... $$ 區塊之前的 SQL DDL 也被萃取(v0.9.72)

Watch、輸出與安裝

  • Windows watch 序列化(v0.9.70):msvcrt 位元組範圍鎖取代 no-op 鎖,WinError 32 並行重建競態關閉(POSIX fcntl 不變)
  • graph.html Node Info 面板(v0.9.72):顯示真實 Type / Source / Community,不再 “unknown”;聚合社群節點顯示成員數
  • docx sidecar(v0.9.72):表格保留在文件原位;讀取所有文字含追蹤插入、content control、text box
  • Skills 自動刷新(v0.9.72):套件升級後自動更新過時的已安裝 skills;本地編輯備份為 SKILL.md.bak;不碰 marker-bounded 的 CLAUDE.md / AGENTS.md / GEMINI.md;GRAPHIFY_NO_AUTO_REFRESH=1 可停用
  • Hook 版本檢查(v0.9.73):graphify hook status 將舊版寫的 hooks 回報為過時
  • 效能(v0.9.73):Neo4j/FalkorDB --push 在 upsert 迴圈前建 per-label id index,修大圖吞吐崩塌

隨堂總結測驗

隨堂測驗

你的團隊用 v0.9.69 維護一個含 Fortran 與 Terraform 的混合 repo。升級到 v0.9.73 後,哪些既有圖需要重新建立才會受益?

💡 想先看個提示?

安全修復能擋住未來的洩漏,但已經寫進圖裡的東西呢?

動手升級檢查清單

升級 v0.9.73:動手檢查清單

逐項勾選,確認你已完成升級必要的步驟(進度會保存在此瀏覽器)

0 / 6

延伸閱讀