You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The DBI SQLite fetch path corrupts Chrome cookie ciphertext stored as SQLite TEXT, which later causes Crypt::Rijndael CBC decryption to fail its correct block-size check.
Exact root cause
In the fixture, encrypted_value is declared BLOB but some rows have SQLite storage class TEXT and contain arbitrary ciphertext bytes, including NUL and invalid UTF-8. In DBI.fetchrow_arrayref and fetchrow_hashref, ResultSet.getObject() returns a Java String; JDBC has already replaced invalid UTF-8 sequences with U+FFFD. The current default SQLite path then UTF-8 encodes that lossy String into a Perl byte string. The first fixture row is 67 raw bytes (v10 plus a 64-byte CBC payload), but the PerlOnJava DBI fetch returns 117 bytes. After HTTP-Cookies-Chrome removes v10, it passes 114 bytes to CBC decrypt, which correctly rejects the non-block-aligned input.
Use SQLite's raw column bytes when fetching text values, then preserve the configured Unicode behavior only for valid UTF-8. The ECB/CBC block-size check in Crypt::Rijndael is correct and should remain.
State: complete
Agent/session: codex-api-20261029-rijndael-cbc
Scope: #1923, preserve raw SQLite TEXT bytes in DBI array/hash fetches.
Work: PR #1925 merged to master as 394157f9b12d06b733cf1eb25297d1db056f0716; source commit 7088249fdc66a96f53acd1f08e8205606bd72c09 was based on master b6546aba3c82e53642ca01b25ffdf2658cb32bb5.
Result: Preserve raw SQLite TEXT bytes before JDBC replaces malformed UTF-8; valid UTF-8 Unicode mode remains supported. Regression coverage and changelog entry merged.
Evidence: GitHub CI run 40900515733 passed on Ubuntu and Windows. Current-source nice -n 19 make, make check-links, DBI regression, SQLite Unicode, and Storable byte tests passed; focused PerlOnJava tests passed on JVM and interpreter. The regression passes system Perl and failed on the unfixed parent on both backends. HTTP-Cookies-Chrome 4.001 _get_rows, load, and save passed on both backends against the same DBI fix.
Closure: #1923 closed automatically when PR #1925 merged at 2026-10-29 16:06:55 UTC. No follow-up was needed.
Activity
fglock commentedon Oct 29, 2026
State: complete
Agent/session: codex-api-20261029-rijndael-cbc
Scope: #1923, preserve raw SQLite TEXT bytes in DBI array/hash fetches.
Work: PR #1925 merged to master as
394157f9b12d06b733cf1eb25297d1db056f0716; source commit7088249fdc66a96f53acd1f08e8205606bd72c09was based on masterb6546aba3c82e53642ca01b25ffdf2658cb32bb5.Result: Preserve raw SQLite TEXT bytes before JDBC replaces malformed UTF-8; valid UTF-8 Unicode mode remains supported. Regression coverage and changelog entry merged.
Evidence: GitHub CI run 40900515733 passed on Ubuntu and Windows. Current-source
nice -n 19 make,make check-links, DBI regression, SQLite Unicode, and Storable byte tests passed; focused PerlOnJava tests passed on JVM and interpreter. The regression passes system Perl and failed on the unfixed parent on both backends. HTTP-Cookies-Chrome 4.001_get_rows,load, andsavepassed on both backends against the same DBI fix.Closure: #1923 closed automatically when PR #1925 merged at 2026-10-29 16:06:55 UTC. No follow-up was needed.