Reported issues for PDF Verify (PDF Agent Stack)
Pod holds 11 of 11 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.
Back to PDF Verify (PDF Agent Stack).
Most discussed
evaluate_policy の advisory 穴 2 件(V-A1 非認証署名の後続変更 / V-A2 非PAdES署名)— v0.7.1 で修正済み
[!NOTE] 記録用 issue。修正が先行しているため起票と同時にクローズする。 ④(Skill 見直し + 実連携)の pdf-trust 実連携で発見し、v0.7.1 で修正・公開済み(commit
1ec5acf・npx 公開版で確認済み)。 出典:docs/FINDINGS-2026-07-20.md。
概要
evaluate_policy の advisory に 2 件の穴があった。どちらも「判定が間違っている」のではなく「判定に必要な事実が呼び出し側に出ない/ルールが素通りする」。
結果として Skill(LLM)が不足分を自力で補いたくなる=「ジャッジはコード、ナラティブは LLM」という委譲設計が壊れる方向の圧力になっていた。engine 側で塞ぐのが筋。
両件とも verdict は不変。advisory と返却 facts の追加のみで、決定論ルールエンジンには触れていない。
V-A1 —…
Read the thread · 2026-07-24 · closed · 1 comment
evaluate_policy の openWorldHint が false のまま(check_revocation: "online" で外部に問い合わせる)
確認した版: 0.28.0
食い違い
src/tools/evaluate-policy.ts111 行のannotationsはopenWorldHint: false- しかし
evaluate_policyはcheck_revocationを受け取り、内部でverifySignaturesを呼ぶ。"online"のときは、OCSP レスポンダ・CRL 配布点・AIA caIssuers へ HTTP で問い合わせる(0.28.0 からは中間 CA の分も) verify_signaturesは同じ理由でopenWorldHint: true(src/tools/verify-signatures.ts91 行、コメント「check_revocation='online' may reach OCSP/CRL endpoints」)- ツール説明にも「
"online"(queries OCSP/CRL endpoints over HTTP)」と書いてある -…
Read the thread · 2026-09-17 · closed · 0 comments
response_format: json の出力が 25,000 文字で切り詰められ、JSON として読めなくなる
確認した版: 0.28.0(npm 公開版)/ 2026-09-17 に #16 の A/B で見つけた。0.27.0 でも同じ
起きたこと
各ツールは本文を truncateIfNeeded(src/utils/formatter.ts 19 行)に通す。CHARACTER_LIMIT(src/constants.ts 6 行、25,000)を超えると先頭 25,000 文字に \n\n…(truncated) を足して返す。response_format: "json" でも同じ処理なので、途中で切れた JSON が返る。isError は false のままで、呼び出し側は JSON.parse で失敗するまで気づけない。
実測(esig/dss の検証用 PDF、0.28.0 を MCP 越しに呼んだ)
| 検体 | ツール | 本文の長さ | JSON として読めるか |
|---|---|---|---|
51sigs.pdf(署名 51 個、4.6 MB) |
… |
Read the thread · 2026-09-17 · closed · 0 comments
scripts/golden.mjs が validate_conformance の skippedRules(数値)を配列として扱い、take が途中で落ちる
確認した版: 0.28.0 / 2026-09-17 に #16 の A/B で見つけた
起きたこと
esig/dss の PAdES 検証用 PDF(dss-pades/src/test/resources/validation/)を --set に渡すと、node scripts/golden.mjs take が次の例外で終了し、ゴールデンが書き出されない。
file:///.../scripts/golden.mjs:249
TypeError: (raw.skippedRules ?? []).map is not a function
原因
scripts/golden.mjs249 行はskippedRulesを配列として読む:skipped: (raw.skippedRules ?? []).map((v) => v.ruleId ?? v).sort()- 実装の
skippedRules…
Read the thread · 2026-09-17 · closed · 0 comments
失効情報の thisUpdate と検証時刻の前後関係を検査する(#13 から分離)
#13 から分けた残り。許容幅は実物の検体で測ってから決める。
現在の動作(#13 の実装後)
- CRL / OCSP の
nextUpdateが検証時刻(validationTime)より前なら、goodをunknownにする thisUpdateと検証時刻の前後関係は見ていない。検証時刻より前に発行された失効情報でもgoodの根拠にしている
決めること
「検証時刻に失効していなかった」と言うには、本来は検証時刻以降に発行された失効情報が要る。一方、署名の直前に取得して CMS や DSS に入れた OCSP 応答は、thisUpdate が署名タイムスタンプより数分早いのが普通。厳密にすると多くの実物で good が unknown に変わる。
- 許容幅を設けるか、設けるなら何分か
- 文書タイムスタンプを検証時刻にした場合(B-LTA)の扱い
先に測るもの
- pdf-agent-stack の…
Read the thread · 2026-09-17 · closed · 0 comments
埋め込み失効情報の読み取り範囲が、出力の説明と合っていない
確認した版: 0.26.1(commit c88e9f4)
現在の動作
src/services/verification-service.ts 207〜208 行:
const embeddedOcsps = dssOcsps;
const embeddedCrls = [...artifacts.crls, ...dssCrls];
- OCSP 応答は DSS からだけ読む
- CRL は、DSS と CMS
SignedData.crlsから読む - CMS の署名属性
adbe-revocationInfoArchival(OID 1.2.840.113583.1.1.8、Adobe が定義した失効情報の属性)は読んでいない(srcに OID の参照は 0 件)
一方、revocation.ts 413 行の detail は 'Embedded OCSP response (DSS/CMS)' で、CMS の OCSP も読んでいるように見える。
仕様
ISO 32000-2…
Read the thread · 2026-09-17 · closed · 0 comments
revocation.status の not_checked が一度も出力されない
確認した版: 0.26.1(commit c88e9f4)
現在の動作
RevocationStatus.NOT_CHECKED = 'not_checked'は定義されている(src/constants.ts138 行)- しかし、これを返すコードが無い。
check_revocation: "none"のときはcheckRevocationを呼ばず、report.revocationはnullのまま(verification-service.ts88 行・236 行) - 参照しているのは
policy-engine.ts250 行の比較だけ。この比較は、実際には一度も真にならない
値が書かれている箇所
| 箇所 | 記述 |
|---|---|
src/tools/verify-signatures.ts 68 行(ツールの description) |
`revocation status ('good' / 'revoked' / 'unknown' /… |
Read the thread · 2026-09-17 · closed · 0 comments
失効日時と署名時刻を比べずに revoked → invalid にしている
確認した版: 0.26.1(commit c88e9f4)/ 判定結果が変わる変更
現在の動作
checkRevocation(src/services/revocation.ts 393 行〜)は、OCSP 応答の certStatus が revoked、または CRL に証明書のシリアル番号が載っていれば、RevocationStatus.REVOKED を返す。失効日時(OCSP の revocationTime、CRL の revocationDate)は読んでいない(revocation.ts に両フィールドの参照は 0 件)。
verification-service.ts 244〜248 行は、REVOKED を受け取ると無条件で verdict = invalid にする。
その結果、次の署名もすべて invalid になる。
- 署名タイムスタンプ(B-T)で署名時刻が証明されていて、その後に証明書が失効した署名
- DSS…
Read the thread · 2026-09-17 · closed · 0 comments
Most recent
証明書チェーンの基準時刻に、署名者が書いた signingTime をタイムスタンプより優先して使っている
確認した版: 0.26.1(commit c88e9f4)/ 判定結果が変わる変更
現在の動作
src/services/verification-service.ts 209〜211 行:
const checkDate =
artifacts.signingTime ??
(cms.signatureTimestamp?.genTime ? new Date(cms.signatureTimestamp.genTime) : new Date());
evaluateTrust は、この checkDate で証明書の有効期間を判定する。順序は次のとおり。
- CMS の
signingTime署名属性(署名者が自分で書く値) - 署名タイムスタンプの
genTime(TSA が証明する値) - 実行時刻
問題
signingTimeは、署名者が任意の値を書ける。期限切れの証明書で署名し、signingTimeを有効期間内の日付にすると、チェーン評価が通る -…
Read the thread · 2026-09-17 · closed · 0 comments
verify_integrity にリビジョン間のオブジェクト単位差分を追加する(どのオブジェクトが変わったか)
ギャップ
verify_integrity は改ざん検知の構造的事実までは返すが、「どのオブジェクトが書き換わった/追加されたか」は返さない。
現状の出力: リビジョン数(incrementalUpdateCount)・署名範囲外のバイト追加(signaturesWithLaterChanges)・
lastSignatureCoversFile・DocMDP 権限違反。
「署名後に 574 バイト足された」までは分かるが、それが**どのオブジェクト(注釈? フォーム値? ページ内容?)**なのかは分からない。
specs/12-use-cases.md UC-10(改ざん箇所のオブジェクト単位ピンポイント指摘)の前提が欠けている。
提案
増分更新の xref を隣接リビジョン間で比較し、変更 / 追加 / 削除されたオブジェクトの一覧(可能なら型: Annot / AcroForm field / Page content 等)を返す。
- verdict は動かさない。増分更新は PDF…
Read the thread · 2026-07-24 · closed · 0 comments
暗号化 PDF(未復号)で PDF/UA 構造系規則が誤 fail する
暗号化 PDF(未復号)で PDF/UA 構造系規則が誤 fail する
症状
validate_conformance(flavour: pdfua-1, engine: native)をパスワード保護された(未復号の)PDF に対して実行すると、実際にはタグ付き(/StructTreeRoot あり)の文書でも次の誤判定が出る(v0.6.2 で確認、v0.6.2 以前から存在):
ua-struct-treeが「No /StructTreeRoot in the catalog」で error fail →compliant: falseに直結ua-images-tagged/ua-link-contentsが「Rule check errored: Expected instance of PDFDict, but got instance of undefined」
原因
pdf-lib を ignoreEncryption: true で load…
Read the thread · 2026-07-19 · closed · 0 comments
The remaining reports are on the project's issue tracker.