I tried to debug this, but it looks very strange.

The cmap looks like this:

311 0 obj
<</Length 294>>stream
/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CMapType 2 def
/CMapName/R857 def
1 begincodespacerange
<0000><ffff>
endcodespacerange
3 beginbfrange
<000f><000f><2022>
<0066><0066><007b>
<0067><0067><007d>
endbfrange
endcmap
CMapName currentdict /CMap defineresource pop
end end

endstream
endobj

From reading of pdf spec I can say that bfrange syntax is valid.
parseCMap1() function that calls error() is in poppler. The code there
looks like this:

 if (!strcmp(tok3, "[")) {
   ....
 } else if (tok3[0] == '<' && tok3[n3 - 1] == '>') {
   ....
 } else {
   error(-1, "Illegal entry in bfrange block in ToUnicode CMap");
 }

On call to error gdb shows:

(gdb) print  (char *)tok3
$15 = 0x7fffda543fc0 "<007d>"
(gdb) print  n3
$16 = 6
(gdb) print  tok3[n3-1]
$18 = 62 '>'
(gdb) print (tok3[0] == '<' && tok3[n3 - 1] == '>')
$19 = true

Now if anyone can tell me why branch with call to error() is executed
instead of previous one...

22 червня 2010 о 12:52 -0400 Frank Ch. Eigler написав(-ла):
> #0  error (pos=-1, 
>     msg=0x351ad4bbf8 "Illegal entry in bfrange block in ToUnicode CMap")
>     at Error.cc:56
> #1  0x000000351aca2f8a in CharCodeToUnicode::parseCMap1 (
>     this=<value optimized out>, getCharFunc=<value optimized out>, 
>     data=<value optimized out>, nBits=<value optimized out>)
>     at CharCodeToUnicode.cc:343

Attachment: signature.asc
Description: Digital signature

Reply via email to