ofz#25684 keep ParseCMAP within legal area

Change-Id: Iee18b5a9390b79efa67414ea2d229d2816c84e18
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102776
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit a014c82522834c972e247a28d8e5f42998ae3c0e)

ofz#25696 OOM

Change-Id: Ia69e9ce1ca0156e960dddb7e0bf98dfd2be2d7cc
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102846
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit d57b14e3394b081adf0888ed8dcb7b86d66c246c)

ofz#25774 keep ParseCMAP within legal area

Change-Id: Ic68fadd3d63631cbccda76e7679d95bb89452d25
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103017
Tested-by: Caolán McNamara <caolanm@redhat.com>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit f8474367449a1b6b54918d2753e3a36798761839)

Fix crash from broken font CMAP subtable

ParseCMAP crashes on a broken CMAP subtable of a font used by the
bugdoc of tdf#119074, which returns a negative offset (technically
it's large positive offset turning into a wrong negative integer,
which is still out of bounds of the CMAP overall size - you get
the point). This simply ignores that broken subtable, checking for
other existing ones.

Regressed-by: c7482bc2904401e7d975b5721ec861b8589253f9
Change-Id: I95820fe3bb6bd2fe2e0cf9d4c3536abce31fd497
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103033
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit 9bf4c5ac49b73cc2a8c89a87ff87238c061a579d)

Missing include

(for std::max, since f8474367449a1b6b54918d2753e3a36798761839 "ofz#25774 keep
ParseCMAP within legal area")

Change-Id: I873c788577e9ec3bd54d9e637d2cf86be7c1f6e6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103089
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
(cherry picked from commit 8cc52b05744443c64cf5eb62ebe3098cd964c437)

ofz#25855 overflow in nTmpOffset

we already know nLength is >= 24 so just move the calc to the other term

Change-Id: Ic52f1686ccf81e6b13d7eb7e74dbd9cb51c8ea01

ofz#25868 Timeout, encoding conversion only sane in 0..SAL_MAX_UINT16 range

so ignore points outside that range to avoid ludicrous ranges that aren't
possible in the input encoding

Change-Id: Ifb7b9b389d4a31b8820a7da661249223fe1e110c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103261
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
1 file changed
tree: 32c910a9fbe3bbdf02018a6d5d9a45d29e1ecbcb
  1. .git-hooks/
  2. .github/
  3. accessibility/
  4. android/
  5. animations/
  6. apple_remote/
  7. avmedia/
  8. basctl/
  9. basegfx/
  10. basic/
  11. bean/
  12. bin/
  13. binaryurp/
  14. bridges/
  15. canvas/
  16. chart2/
  17. cli_ure/
  18. codemaker/
  19. comphelper/
  20. compilerplugins/
  21. config_host/
  22. configmgr/
  23. connectivity/
  24. cppcanvas/
  25. cppu/
  26. cppuhelper/
  27. cpputools/
  28. cui/
  29. dbaccess/
  30. desktop/
  31. distro-configs/
  32. drawinglayer/
  33. dtrans/
  34. editeng/
  35. embeddedobj/
  36. embedserv/
  37. emfio/
  38. eventattacher/
  39. extensions/
  40. external/
  41. extras/
  42. filter/
  43. forms/
  44. formula/
  45. fpicker/
  46. framework/
  47. helpcompiler/
  48. hwpfilter/
  49. i18nlangtag/
  50. i18npool/
  51. i18nutil/
  52. icon-themes/
  53. idl/
  54. idlc/
  55. include/
  56. instsetoo_native/
  57. io/
  58. ios/
  59. javaunohelper/
  60. jurt/
  61. jvmaccess/
  62. jvmfwk/
  63. l10ntools/
  64. librelogo/
  65. libreofficekit/
  66. lingucomponent/
  67. linguistic/
  68. lotuswordpro/
  69. m4/
  70. nlpsolver/
  71. o3tl/
  72. odk/
  73. offapi/
  74. officecfg/
  75. onlineupdate/
  76. oovbaapi/
  77. oox/
  78. opencl/
  79. osx/
  80. package/
  81. pch/
  82. postprocess/
  83. pyuno/
  84. qadevOOo/
  85. readlicense_oo/
  86. registry/
  87. remotebridges/
  88. reportbuilder/
  89. reportdesign/
  90. ridljar/
  91. sal/
  92. salhelper/
  93. sax/
  94. sc/
  95. scaddins/
  96. sccomp/
  97. schema/
  98. scp2/
  99. scripting/
  100. sd/
  101. sdext/
  102. setup_native/
  103. sfx2/
  104. shell/
  105. slideshow/
  106. smoketest/
  107. solenv/
  108. soltools/
  109. sot/
  110. starmath/
  111. stoc/
  112. store/
  113. svgio/
  114. svl/
  115. svtools/
  116. svx/
  117. sw/
  118. swext/
  119. sysui/
  120. test/
  121. testtools/
  122. toolkit/
  123. tools/
  124. ucb/
  125. ucbhelper/
  126. udkapi/
  127. uitest/
  128. UnoControls/
  129. unodevtools/
  130. unoidl/
  131. unoil/
  132. unotest/
  133. unotools/
  134. unoxml/
  135. ure/
  136. uui/
  137. vbahelper/
  138. vcl/
  139. winaccessibility/
  140. wizards/
  141. writerfilter/
  142. writerperfect/
  143. xmerge/
  144. xmlhelp/
  145. xmloff/
  146. xmlreader/
  147. xmlscript/
  148. xmlsecurity/
  149. .buckconfig
  150. .buckversion
  151. .clang-format
  152. .editorconfig
  153. .git-blame-ignore-revs
  154. .gitattributes
  155. .gitignore
  156. .gitmodules
  157. .gitreview
  158. autogen.sh
  159. BUCK
  160. config.guess
  161. config.sub
  162. config_host.mk.in
  163. config_host_lang.mk.in
  164. configure.ac
  165. COPYING
  166. COPYING.LGPL
  167. COPYING.MPL
  168. download.lst
  169. g
  170. hardened_runtime.xcent
  171. install-sh
  172. leak-suppress.txt
  173. Library_merged.mk
  174. lo.xcent
  175. logerrit
  176. Makefile.fetch
  177. Makefile.gbuild
  178. Makefile.in
  179. README.cross
  180. README.md
  181. README.Solaris
  182. Repository.mk
  183. RepositoryExternal.mk
  184. RepositoryFixes.mk
  185. RepositoryModule_build.mk
  186. RepositoryModule_host.mk
  187. sanitize-ubsan-blacklist
  188. setup.cfg
  189. TEMPLATE.SOURCECODE.HEADER
README.md

LibreOffice

Coverity Scan Build Status CII Best Practices Translation status

LibreOffice is an integrated office suite based on copyleft licenses and compatible with most document formats and standards. Libreoffice is backed by The Document Foundation, which represents a large independent community of enterprises, developers and other volunteers moved by the common goal of bringing to the market the best software for personal productivity. LibreOffice is open source, and free to download, use and distribute.

A quick overview of the LibreOffice code structure.

Overview

You can develop for LibreOffice in one of two ways, one recommended and one much less so. First the somewhat less recommended way: it is possible to use the SDK to develop an extension, for which you can read the API docs here and here. This re-uses the (extremely generic) UNO APIs that are also used by macro scripting in StarBasic.

The best way to add a generally useful feature to LibreOffice is to work on the code base however. Overall this way makes it easier to compile and build your code, it avoids any arbitrary limitations of our scripting APIs, and in general is far more simple and intuitive - if you are a reasonably able C++ programmer.

The build chain and runtime baselines

These are the current minimal operating system and compiler versions to run and compile LibreOffice, also used by the TDF builds:

  • Windows:
    • Runtime: Windows 7
    • Build: Cygwin + Visual Studio 2017 version 15.7
  • macOS:
    • Runtime: 10.10
    • Build: 10.13.2 + Xcode 9.3 Build: 10.14.x (Mojave) + Xcode 11.x for TDF builds (tdf#122218)
  • Linux:
    • Runtime: RHEL 7 or CentOS 7
    • Build: either GCC 7.0.0; or Clang 5.0.2 with libstdc++ 7.3.0
  • iOS (only for LibreOfficeKit):
    • Runtime: 11.4 (only support for newer i devices == 64 bit)
    • Build: Xcode 9.3 and iPhone SDK 11.4
  • Android:
    • Build: NDK r19c and SDK 22.6.2

If you want to use Clang with the LibreOffice compiler plugins, the minimal version of Clang is 5.0.2. Since Xcode doesn't provide the compiler plugin headers, you have to compile your own Clang to use them on macOS.

You can find the TDF configure switches in the distro-configs/ directory.

To setup your initial build environment on Windows and macOS, we provide the LibreOffice Development Environment (LODE) scripts.

For more information see the build instructions for your platform in the TDF wiki.

The important bits of code

Each module should have a README file inside it which has some degree of documentation for that module; patches are most welcome to improve those. We have those turned into a web page here:

https://docs.libreoffice.org/

However, there are two hundred modules, many of them of only peripheral interest for a specialist audience. So - where is the good stuff, the code that is most useful. Here is a quick overview of the most important ones:

ModuleDescription
sal/this provides a simple System Abstraction Layer
tools/this provides basic internal types: 'Rectangle', 'Color' etc.
vcl/this is the widget toolkit library and one rendering abstraction
frameworkUNO framework, responsible for building toolbars, menus, status bars, and the chrome around the document using widgets from VCL, and XML descriptions from /uiconfig/ files
sfx2/legacy core framework used by Writer/Calc/Draw: document model / load/save / signals for actions etc.
svx/drawing model related helper code, including much of Draw/Impress

Then applications

ModuleDescription
desktop/this is where the 'main' for the application lives, init / bootstrap. the name dates back to an ancient StarOffice that also drew a desktop
sw/Writer
sc/Calc
sd/Draw / Impress

There are several other libraries that are helpful from a graphical perspective:

ModuleDescription
basegfx/algorithms and data-types for graphics as used in the canvas
canvas/new (UNO) canvas rendering model with various backends
cppcanvas/C++ helper classes for using the UNO canvas
drawinglayer/View code to render drawable objects and break them down into primitives we can render more easily.

Rules for #include directives (C/C++)

Use the "..." form if and only if the included file is found next to the including file. Otherwise, use the <...> form. (For further details, see the mail Re: C[++]: Normalizing include syntax ("" vs <>).)

The UNO API include files should consistently use double quotes, for the benefit of external users of this API.

loplugin:includeform (compilerplugins/clang/includeform.cxx) enforces these rules.

Finding out more

Beyond this, you can read the README files, send us patches, ask on the mailing list libreoffice@lists.freedesktop.org (no subscription required) or poke people on IRC #libreoffice-dev on irc.freenode.net - we're a friendly and generally helpful mob. We know the code can be hard to get into at first, and so there are no silly questions.