[Libreoffice-commits] core.git: vcl/source
Stephan Bergmann (via logerrit)
logerrit at kemper.freedesktop.org
Wed Sep 23 14:13:03 UTC 2020
vcl/source/pdf/PDFiumLibrary.cxx | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
New commits:
commit 08705b75ff8b5a10dc039a9aa1042e04a281729a
Author: Stephan Bergmann <sbergman at redhat.com>
AuthorDate: Wed Sep 23 12:32:08 2020 +0200
Commit: Stephan Bergmann <sbergman at redhat.com>
CommitDate: Wed Sep 23 16:12:23 2020 +0200
These PDFium-provided strings are always in UTF-16LE
...see the documentation of FPDFTextObj_GetText in
workdir/UnpackedTarball/pdfium/public/fpdf_edit.h and of
FPDFAnnot_GetStringValue in workdir/UnpackedTarball/pdfium/public/fpdf_annot.h.
This appears to be broken ever since the code's introduction in
440cb3fb80d9fd356871eac410b9797f23433722 "pdf: add PDFiumTextPage and
PDFiumPageObject + test" resp. 7e4dc3b1eabcb1993d4143c046a2f32fedc852ed "vcl:
Add annotation reading to PDFiumLibrary c++ wrapper". It caused
vcl_pdfium_library_test to fail on (big-endian) s390x with
> vcl/qa/cppunit/PDFiumLibraryTest.cxx:141:PDFiumLibraryTest::testPageObjects
equality assertion failed
> - Expected: The quick, brown fox jumps over a lazy dog. DJs flock by when MTV ax quiz prog. Junk MTV quiz
> - Actual : 吀栀攀 焀甀椀挀欀Ⰰ 戀爀漀眀渀 昀漀砀 樀甀洀瀀猀 漀瘀攀爀 愀 氀愀稀礀 搀漀最⸀ 䐀䨀猀 昀氀漀挀欀 戀礀 眀栀攀渀 䴀吀嘀 愀砀 焀甀椀稀 瀀爀漀最⸀ 䨀甀渀欀 䴀吀嘀 焀甀椀稀
and
> vcl/qa/cppunit/PDFiumLibraryTest.cxx:192:PDFiumLibraryTest::testAnnotationsMadeInEvince
> equality assertion failed
> - Expected: quikee
> - Actual : 焀甀椀欀攀攀
Change-Id: I6fb5bea43646d544b8c3bdf06a63a1ed3df9c07e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103243
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman at redhat.com>
diff --git a/vcl/source/pdf/PDFiumLibrary.cxx b/vcl/source/pdf/PDFiumLibrary.cxx
index 024665efc7e2..360c88657161 100644
--- a/vcl/source/pdf/PDFiumLibrary.cxx
+++ b/vcl/source/pdf/PDFiumLibrary.cxx
@@ -19,6 +19,7 @@
#include <fpdf_edit.h>
#include <fpdf_text.h>
+#include <osl/endian.h>
#include <vcl/bitmap.hxx>
#include <bitmapwriteaccess.hxx>
@@ -237,7 +238,16 @@ OUString PDFiumPageObject::getText(std::unique_ptr<PDFiumTextPage> const& pTextP
assert(nActualBytes % 2 == 0);
nActualBytes /= 2;
if (nActualBytes > 1)
+ {
+#if defined OSL_BIGENDIAN
+ // The data returned by FPDFTextObj_GetText is documented to always be UTF-16LE:
+ for (int i = 0; i != nActualBytes; ++i)
+ {
+ pText[i] = OSL_SWAPWORD(pText[i]);
+ }
+#endif
sReturnText = OUString(pText.get());
+ }
return sReturnText;
}
@@ -432,7 +442,16 @@ OUString PDFiumAnnotation::getString(OString const& rKey)
assert(nStringSize % 2 == 0);
nStringSize /= 2;
if (nStringSize > 0)
+ {
+#if defined OSL_BIGENDIAN
+ // The data returned by FPDFAnnot_GetStringValue is documented to always be UTF-16LE:
+ for (unsigned long i = 0; i != nStringSize; ++i)
+ {
+ pText[i] = OSL_SWAPWORD(pText[i]);
+ }
+#endif
rString = OUString(pText.get());
+ }
}
return rString;
}
More information about the Libreoffice-commits
mailing list