pdfalyzer 1.17.6__tar.gz → 1.17.8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pdfalyzer might be problematic. Click here for more details.

Files changed (52) hide show
  1. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/CHANGELOG.md +6 -0
  2. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/PKG-INFO +22 -26
  3. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/README.md +19 -23
  4. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/pdfalyzer.py +9 -3
  5. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pyproject.toml +3 -3
  6. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/.pdfalyzer.example +0 -0
  7. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/LICENSE +0 -0
  8. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/__init__.py +0 -0
  9. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/__main__.py +0 -0
  10. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/binary/binary_scanner.py +0 -0
  11. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/config.py +0 -0
  12. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/decorators/document_model_printer.py +0 -0
  13. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/decorators/indeterminate_node.py +0 -0
  14. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/decorators/pdf_file.py +0 -0
  15. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/decorators/pdf_object_properties.py +0 -0
  16. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/decorators/pdf_tree_node.py +0 -0
  17. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/decorators/pdf_tree_verifier.py +0 -0
  18. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/detection/constants/binary_regexes.py +0 -0
  19. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/detection/constants/javascript_reserved_keywords.py +0 -0
  20. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/detection/javascript_hunter.py +0 -0
  21. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/detection/yaralyzer_helper.py +0 -0
  22. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/font_info.py +0 -0
  23. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/helpers/dict_helper.py +0 -0
  24. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/helpers/filesystem_helper.py +0 -0
  25. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/helpers/image_helper.py +0 -0
  26. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/helpers/number_helper.py +0 -0
  27. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/helpers/pdf_object_helper.py +0 -0
  28. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/helpers/rich_text_helper.py +0 -0
  29. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/helpers/string_helper.py +0 -0
  30. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/output/character_mapping.py +0 -0
  31. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/output/layout.py +0 -0
  32. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/output/pdfalyzer_presenter.py +0 -0
  33. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/output/styles/node_colors.py +0 -0
  34. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/output/styles/rich_theme.py +0 -0
  35. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/output/tables/decoding_stats_table.py +0 -0
  36. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/output/tables/font_summary_table.py +0 -0
  37. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/output/tables/pdf_node_rich_table.py +0 -0
  38. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/output/tables/stream_objects_table.py +0 -0
  39. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/pdf_object_relationship.py +0 -0
  40. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/util/adobe_strings.py +0 -0
  41. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/util/argument_parser.py +0 -0
  42. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/util/cli_tools_argument_parser.py +0 -0
  43. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/util/debugging.py +0 -0
  44. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/util/exceptions.py +0 -0
  45. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/util/page_range.py +0 -0
  46. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/util/pdf_parser_manager.py +0 -0
  47. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/yara_rules/PDF.yara +0 -0
  48. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/yara_rules/PDF_binary_stream.yara +0 -0
  49. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/yara_rules/__init.py__ +0 -0
  50. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/yara_rules/didier_stevens.yara +0 -0
  51. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/yara_rules/lprat.static_file_analysis.yara +0 -0
  52. {pdfalyzer-1.17.6 → pdfalyzer-1.17.8}/pdfalyzer/yara_rules/pdf_malware.yara +0 -0
@@ -1,5 +1,11 @@
1
1
  # NEXT RELEASE
2
2
 
3
+ ### 1.17.8
4
+ * Handle `AttributeError` in `FontInfo` extraction
5
+
6
+ ### 1.17.7
7
+ * Bump `pypdf` to 6.1.3 (fixes [#31](https://github.com/michelcrypt4d4mus/pdfalyzer/issues/31)), `PyMuPDF` to 1.26.5
8
+
3
9
  ### 1.17.6
4
10
  * Better handling for errors resulting from bugs in PyPDF
5
11
  * Properly close file handle when pdfalyzing is complete
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pdfalyzer
3
- Version: 1.17.6
3
+ Version: 1.17.8
4
4
  Summary: Analyze PDFs with colors (and YARA). Visualize a PDF's inner tree-like data structure, check it against a library of YARA rules, force decodes of suspicious font binaries, and more.
5
5
  Home-page: https://github.com/michelcrypt4d4mus/pdfalyzer
6
6
  License: GPL-3.0-or-later
@@ -22,9 +22,9 @@ Classifier: Topic :: Artistic Software
22
22
  Classifier: Topic :: Scientific/Engineering :: Visualization
23
23
  Classifier: Topic :: Security
24
24
  Provides-Extra: extract
25
- Requires-Dist: PyMuPDF (>=1.26.4,<2.0.0) ; extra == "extract"
25
+ Requires-Dist: PyMuPDF (>=1.26.5,<2.0.0) ; extra == "extract"
26
26
  Requires-Dist: anytree (>=2.13,<3.0)
27
- Requires-Dist: pypdf (>=6.0.0,<7.0.0)
27
+ Requires-Dist: pypdf (>=6.1.3,<7.0.0)
28
28
  Requires-Dist: pytesseract (>=0.3.13,<0.4.0) ; extra == "extract"
29
29
  Requires-Dist: yaralyzer (>=1.0.9,<2.0.0)
30
30
  Project-URL: Changelog, https://github.com/michelcrypt4d4mus/pdfalyzer/blob/master/CHANGELOG.md
@@ -67,9 +67,8 @@ If you're looking for one of these things this may be the tool for you.
67
67
  ### What It Don't Do
68
68
  This tool is mostly for examining/working with a PDF's data and logical structure. As such it doesn't have much to offer as far as extracting text, rendering[^3], writing, etc. etc.
69
69
 
70
- If you suspect you are dealing with a malcious PDF you can safely run `pdfalyze` on it; embedded javascript etc. will not be executed. If you want to actually look at the contents of a suspect PDF you can use [`dangerzone`](https://dangerzone.rocks/) to sanitize the contents with extreme prejudice before opening it.
70
+ If you suspect you are dealing with a malcious PDF you can safely run `pdfalyze` on it. Embedded javascript and `/OpenAction` nodes etc. will not be executed. If you want to actually look at the contents of a suspect PDF you can use [`dangerzone`](https://dangerzone.rocks/) to sanitize the contents with extreme prejudice before opening it.
71
71
 
72
- -------------
73
72
 
74
73
  # Installation
75
74
  #### All Platforms
@@ -99,7 +98,6 @@ brew install pdfalyzer
99
98
  sudo apt-get install build-essential libssl-dev libffi-dev rustc
100
99
  ```
101
100
 
102
- -------------
103
101
 
104
102
  # Usage
105
103
 
@@ -115,7 +113,7 @@ If you provide none of the flags in the `ANALYSIS SELECTION` section of the `--h
115
113
 
116
114
  The `--streams` output is the one used to hunt for patterns in the embedded bytes and can be _extremely_ verbose depending on the `--quote-char` options chosen (or not chosen) and contents of the PDF. [The Yaralyzer](https://github.com/michelcrypt4d4mus/yaralyzer) handles this task; if you want to hunt for patterns in the bytes other than bytes surrounded by backticks/frontslashes/brackets/quotes/etc. you may want to use The Yaralyzer directly. As The Yaralyzer is a prequisite for The Pdfalyzer you may already have the `yaralyze` command installed and available.
117
115
 
118
- ### Setting Command Line Options Permanently With A `.pdfalyzer` File
116
+ #### Setting Command Line Options Permanently With A `.pdfalyzer` File
119
117
  When you run `pdfalyze` on some PDF the tool will check for a file called `.pdfalyzer` in these places in this order:
120
118
 
121
119
  1. the current directory
@@ -123,12 +121,9 @@ When you run `pdfalyze` on some PDF the tool will check for a file called `.pdfa
123
121
 
124
122
  If it finds a `.pdfalyzer` file in either such place it will load configuration options from it. Documentation on the options that can be configured with these files lives in [`.pdfalyzer.example`](.pdfalyzer.example) which doubles as an example file you can copy into place and edit to your needs. Handy if you find yourself typing the same command line options over and over again.
125
123
 
126
- ### Environment Variables
124
+ #### Environment Variables
127
125
  Even if you don't configure your own `.pdfalyzer` file you may still glean some insight from reading the descriptions of the various variables in [`.pdfalyzer.example`](.pdfalyzer.example); there's a little more exposition there than in the output of `pdfalyze -h`.
128
126
 
129
- ### Colors And Themes
130
- Run `pdfalyzer_show_color_theme` to see the color theme employed.
131
-
132
127
  ### Guarantees
133
128
  Warnings will be printed if any PDF object ID between 1 and the `/Size` reported by the PDF itself could not be successfully placed in the tree. If you do not get any warnings then all[^2] of the inner PDF objects should be seen in the output.
134
129
 
@@ -136,7 +131,22 @@ Warnings will be printed if any PDF object ID between 1 and the `/Size` reported
136
131
  [BUFFERZONE Team](https://bufferzonesecurity.com) posted [an excellent example](https://bufferzonesecurity.com/the-beginners-guide-to-adobe-pdf-malware-reverse-engineering-part-1/) of how one might use The Pdfalyzer in tandem with [Didier Stevens' PDF tools](#installing-didier-stevenss-pdf-analysis-tools) to investigate a potentially malicious PDF (archived in [the `doc/` dir in this repo](./doc/) if the link rots).
137
132
 
138
133
 
139
- ## Use As A Code Library
134
+ ## Included Command Line Tools
135
+ The Pdfalyzer comes with a few command line tools for doing stuff with PDFs:
136
+
137
+ * `combine_pdfs` - Combines multiple PDFs into a single PDF. Run `combine_pdfs --help` for more info.
138
+ * `extract_pdf_pages` - Extracts page ranges (e.g. "10-25") from a PDF and writes them to a new PDF. Run `extract_pdf_pages --help` for more info.
139
+ * `extract_pdf_text` - Extracts text from a PDF, including applying OCR to all embedded images. Run `extract_pdf_text --help` for more info.
140
+ * `pdfalyzer_show_color_theme` - Run to see the color theme employed in Pdfalyzer's output.
141
+
142
+ Running `extract_pdf_text` requires that you install The Pdfalyzer's optional dependencies:
143
+
144
+ ```bash
145
+ pipx install pdfalyzer[extract]
146
+ ```
147
+
148
+
149
+ ## As A Python Library
140
150
  For info about setting up a dev environment see [Contributing](#contributing) below.
141
151
 
142
152
  At its core The Pdfalyzer is taking PDF internal objects gathered by [PyPDF](https://github.com/py-pdf/pypdf) and wrapping them in [AnyTree](https://github.com/c0fec0de/anytree)'s `NodeMixin` class. Given that things like searching the tree or accessing internal PDF properties will be done through those packages' code it may be helpful to review their documentation.
@@ -247,20 +257,6 @@ Things like, say, a hidden binary `/F` (PDF instruction meaning "URL") followed
247
257
 
248
258
 
249
259
  # PDF Resources
250
- ## Included PDF Tools
251
- The Pdfalyzer comes with a few command line tools:
252
-
253
- * `combine_pdfs` - Combines multiple PDFs into a single PDF. Run `combine_pdfs --help` for more info.
254
- * `extract_pdf_pages` - Extracts page ranges (e.g. "10-25") from a PDF and writes them to a new PDF. Run `extract_pdf_pages --help` for more info.
255
- * `extract_pdf_text` - Extracts text from a PDF, including applying OCR to all embedded images. Run `extract_pdf_text --help` for more info.
256
-
257
- Running `extract_pdf_text` requires that you install The Pdfalyzer's optional dependencies:
258
-
259
- ```bash
260
- pipx install pdfalyzer[extract]
261
- ```
262
-
263
-
264
260
  ## 3rd Party PDF Tools
265
261
  ### Installing Didier Stevens's PDF Analysis Tools
266
262
  Stevens's tools provide comprehensive info about the contents of a PDF, are guaranteed not to trigger the rendering of any malicious content (especially `pdfid.py`), and have been battle tested for well over a decade. It would probably be a good idea to analyze your PDF with his tools before you start working with this one.
@@ -33,9 +33,8 @@ If you're looking for one of these things this may be the tool for you.
33
33
  ### What It Don't Do
34
34
  This tool is mostly for examining/working with a PDF's data and logical structure. As such it doesn't have much to offer as far as extracting text, rendering[^3], writing, etc. etc.
35
35
 
36
- If you suspect you are dealing with a malcious PDF you can safely run `pdfalyze` on it; embedded javascript etc. will not be executed. If you want to actually look at the contents of a suspect PDF you can use [`dangerzone`](https://dangerzone.rocks/) to sanitize the contents with extreme prejudice before opening it.
36
+ If you suspect you are dealing with a malcious PDF you can safely run `pdfalyze` on it. Embedded javascript and `/OpenAction` nodes etc. will not be executed. If you want to actually look at the contents of a suspect PDF you can use [`dangerzone`](https://dangerzone.rocks/) to sanitize the contents with extreme prejudice before opening it.
37
37
 
38
- -------------
39
38
 
40
39
  # Installation
41
40
  #### All Platforms
@@ -65,7 +64,6 @@ brew install pdfalyzer
65
64
  sudo apt-get install build-essential libssl-dev libffi-dev rustc
66
65
  ```
67
66
 
68
- -------------
69
67
 
70
68
  # Usage
71
69
 
@@ -81,7 +79,7 @@ If you provide none of the flags in the `ANALYSIS SELECTION` section of the `--h
81
79
 
82
80
  The `--streams` output is the one used to hunt for patterns in the embedded bytes and can be _extremely_ verbose depending on the `--quote-char` options chosen (or not chosen) and contents of the PDF. [The Yaralyzer](https://github.com/michelcrypt4d4mus/yaralyzer) handles this task; if you want to hunt for patterns in the bytes other than bytes surrounded by backticks/frontslashes/brackets/quotes/etc. you may want to use The Yaralyzer directly. As The Yaralyzer is a prequisite for The Pdfalyzer you may already have the `yaralyze` command installed and available.
83
81
 
84
- ### Setting Command Line Options Permanently With A `.pdfalyzer` File
82
+ #### Setting Command Line Options Permanently With A `.pdfalyzer` File
85
83
  When you run `pdfalyze` on some PDF the tool will check for a file called `.pdfalyzer` in these places in this order:
86
84
 
87
85
  1. the current directory
@@ -89,12 +87,9 @@ When you run `pdfalyze` on some PDF the tool will check for a file called `.pdfa
89
87
 
90
88
  If it finds a `.pdfalyzer` file in either such place it will load configuration options from it. Documentation on the options that can be configured with these files lives in [`.pdfalyzer.example`](.pdfalyzer.example) which doubles as an example file you can copy into place and edit to your needs. Handy if you find yourself typing the same command line options over and over again.
91
89
 
92
- ### Environment Variables
90
+ #### Environment Variables
93
91
  Even if you don't configure your own `.pdfalyzer` file you may still glean some insight from reading the descriptions of the various variables in [`.pdfalyzer.example`](.pdfalyzer.example); there's a little more exposition there than in the output of `pdfalyze -h`.
94
92
 
95
- ### Colors And Themes
96
- Run `pdfalyzer_show_color_theme` to see the color theme employed.
97
-
98
93
  ### Guarantees
99
94
  Warnings will be printed if any PDF object ID between 1 and the `/Size` reported by the PDF itself could not be successfully placed in the tree. If you do not get any warnings then all[^2] of the inner PDF objects should be seen in the output.
100
95
 
@@ -102,7 +97,22 @@ Warnings will be printed if any PDF object ID between 1 and the `/Size` reported
102
97
  [BUFFERZONE Team](https://bufferzonesecurity.com) posted [an excellent example](https://bufferzonesecurity.com/the-beginners-guide-to-adobe-pdf-malware-reverse-engineering-part-1/) of how one might use The Pdfalyzer in tandem with [Didier Stevens' PDF tools](#installing-didier-stevenss-pdf-analysis-tools) to investigate a potentially malicious PDF (archived in [the `doc/` dir in this repo](./doc/) if the link rots).
103
98
 
104
99
 
105
- ## Use As A Code Library
100
+ ## Included Command Line Tools
101
+ The Pdfalyzer comes with a few command line tools for doing stuff with PDFs:
102
+
103
+ * `combine_pdfs` - Combines multiple PDFs into a single PDF. Run `combine_pdfs --help` for more info.
104
+ * `extract_pdf_pages` - Extracts page ranges (e.g. "10-25") from a PDF and writes them to a new PDF. Run `extract_pdf_pages --help` for more info.
105
+ * `extract_pdf_text` - Extracts text from a PDF, including applying OCR to all embedded images. Run `extract_pdf_text --help` for more info.
106
+ * `pdfalyzer_show_color_theme` - Run to see the color theme employed in Pdfalyzer's output.
107
+
108
+ Running `extract_pdf_text` requires that you install The Pdfalyzer's optional dependencies:
109
+
110
+ ```bash
111
+ pipx install pdfalyzer[extract]
112
+ ```
113
+
114
+
115
+ ## As A Python Library
106
116
  For info about setting up a dev environment see [Contributing](#contributing) below.
107
117
 
108
118
  At its core The Pdfalyzer is taking PDF internal objects gathered by [PyPDF](https://github.com/py-pdf/pypdf) and wrapping them in [AnyTree](https://github.com/c0fec0de/anytree)'s `NodeMixin` class. Given that things like searching the tree or accessing internal PDF properties will be done through those packages' code it may be helpful to review their documentation.
@@ -213,20 +223,6 @@ Things like, say, a hidden binary `/F` (PDF instruction meaning "URL") followed
213
223
 
214
224
 
215
225
  # PDF Resources
216
- ## Included PDF Tools
217
- The Pdfalyzer comes with a few command line tools:
218
-
219
- * `combine_pdfs` - Combines multiple PDFs into a single PDF. Run `combine_pdfs --help` for more info.
220
- * `extract_pdf_pages` - Extracts page ranges (e.g. "10-25") from a PDF and writes them to a new PDF. Run `extract_pdf_pages --help` for more info.
221
- * `extract_pdf_text` - Extracts text from a PDF, including applying OCR to all embedded images. Run `extract_pdf_text --help` for more info.
222
-
223
- Running `extract_pdf_text` requires that you install The Pdfalyzer's optional dependencies:
224
-
225
- ```bash
226
- pipx install pdfalyzer[extract]
227
- ```
228
-
229
-
230
226
  ## 3rd Party PDF Tools
231
227
  ### Installing Didier Stevens's PDF Analysis Tools
232
228
  Stevens's tools provide comprehensive info about the contents of a PDF, are guaranteed not to trigger the rendering of any malicious content (especially `pdfid.py`), and have been battle tested for well over a decade. It would probably be a good idea to analyze your PDF with his tools before you start working with this one.
@@ -220,14 +220,20 @@ class Pdfalyzer:
220
220
  def _extract_font_infos(self) -> None:
221
221
  """Extract information about fonts in the tree and place it in `self.font_infos`."""
222
222
  for node in self.node_iterator():
223
- if isinstance(node.obj, dict) and RESOURCES in node.obj:
224
- log.debug(f"Extracting fonts from node with '{RESOURCES}' key: {node}...")
225
- known_font_ids = [fi.idnum for fi in self.font_infos]
223
+ if not (isinstance(node.obj, dict) and RESOURCES in node.obj):
224
+ continue
225
+
226
+ log.debug(f"Extracting fonts from node with '{RESOURCES}' key: {node}...")
227
+ known_font_ids = [fi.idnum for fi in self.font_infos]
226
228
 
229
+ try:
227
230
  self.font_infos += [
228
231
  fi for fi in FontInfo.extract_font_infos(node.obj)
229
232
  if fi.idnum not in known_font_ids
230
233
  ]
234
+ except AttributeError as e:
235
+ console.print_exception()
236
+ log.error(f"Failed to extract font information from node: {node}")
231
237
 
232
238
  def _build_or_find_node(self, relationship: IndirectObject, relationship_key: str) -> PdfTreeNode:
233
239
  """If node in self.nodes_encountered already then return it, otherwise build a node and store it."""
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "pdfalyzer"
3
- version = "1.17.6"
3
+ version = "1.17.8"
4
4
  description = "Analyze PDFs with colors (and YARA). Visualize a PDF's inner tree-like data structure, check it against a library of YARA rules, force decodes of suspicious font binaries, and more."
5
5
  authors = ["Michel de Cryptadamus <michel@cryptadamus.com>"]
6
6
  license = "GPL-3.0-or-later"
@@ -67,8 +67,8 @@ packages = [
67
67
  [tool.poetry.dependencies]
68
68
  python = "^3.10"
69
69
  anytree = "~=2.13"
70
- pypdf = "^6.0.0"
71
- PyMuPDF = {version = "^1.26.4", optional = true}
70
+ pypdf = "^6.1.3"
71
+ PyMuPDF = {version = "^1.26.5", optional = true}
72
72
  pytesseract = {version = "^0.3.13", optional = true}
73
73
  yaralyzer = "^1.0.9"
74
74
 
File without changes