Repository navigation
fix: carry bfrange offset across bytes in cmap Decode - #95
Merged
Merged
Conversation
|
This fixes text extraction for PDFs written by go-pdf/fpdf with
On master, every rune above U+00FF comes back as its low byte. pdf.js and MuPDF read the same files correctly, and with this PR the output matches theirs. We also checked two files master already reads correctly, a Chromium-printed Thai PDF and a Latin-only fpdf report, and both still read the same with this PR. We'd move to this as soon as it's merged. Thanks! |
Author
|
Thank you for the additional testing @neupenguin ! I'm glad to see confirmation of my fix. |
Owner
|
looks good |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
For a code inside a
bfrangewith a string destination,Decodeadded the offset to the last byte of the destination only. Any range that crosses a byte boundary decodes wrongly. The common case is the identity map<0000> <FFFF> <0000>, which go-pdf/fpdf writes for UTF-8 fonts: U+2022•decodes as"and U+0141ŁasA.The fix adds the full offset to the destination, carrying across bytes.
Test plan:
TestCmapDecodeBFRangeCarry, which fails onmasterand passes with this change.go test ./...passes.