Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-nltk for openSUSE:Factory checked in at 2026-10-26 10:40:15 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-nltk (Old) and /work/SRC/openSUSE:Factory/.python-nltk.new.2252680 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-nltk" Mon Oct 26 10:40:15 2026 rev:27 rq:1392658 version:3.10.4 Changes: -------- --- /work/SRC/openSUSE:Factory/python-nltk/python-nltk.changes 2026-08-24 16:20:16.637687951 +0200 +++ /work/SRC/openSUSE:Factory/.python-nltk.new.2252680/python-nltk.changes 2026-10-26 10:40:19.086918753 +0100 @@ -1,0 +2,186 @@ +Mon Oct 26 08:27:00 UTC 2026 - Daniel Garcia <[email protected]> + +- Update to 3.10.4 (CVE-2026-81726, bsc#1285312, CVE-2026-109956, bsc#1278146): + + This release routes every file path, archive, download, URL fetch + and external program through one sandbox that keeps reads and writes + inside the trusted data directories, refuses path traversal, symlink + escapes and decompression bombs, blocks requests to internal network + addresses, and runs Java and other third-party tools only from + trusted absolute locations with validated options and input. Pickled + models now load through a restricted unpickler, XML and JSON parsing + are hardened, and regular expressions, recursion and slow algorithms + in the tokenizers, parsers, stemmers and corpus readers are bounded + against denial-of-service input. Text that NLTK writes to the + terminal, to CSV files, to the WordNet browser and to third-party + tool input is sanitized against injection. + + ## Security changes you may notice + Every refusal below raises with a message that starts with "Security + Violation" and names the check, so a failure is easy to search for + (PR #3877). + + - Data directories (nltk.pathsec, nltk.data): corpora, models and + every other resource are read and written only inside the + directories listed in nltk.data.path. A path that leaves a data + root, a symlink that points out of one, and a NUL byte or encoded + traversal in a resource name are refused. A data root, or a + directory on the way to a resource, that another account can write + to is skipped with a warning naming the directory and the remedy. + Keep private data in a private directory and add it to + nltk.data.path; /tmp is not a data root. Model save and load + methods (perceptron, maxent, named-entity chunker, Weka, crf, + hunpos, Stanford) accept destinations inside a data root only (PR + #3797, #3753, #3850, #3761, #3755, #3759, #3760, #3763, #3806, + #3807, #3808, #3809, #3813, #3814, #3815, #3848, #3851, #3852, + #3853, #3863, #3871, #3888, #3945, #3961, #3969, #3981) + - Downloader: downloaded package archives stay private to the + installing account (0600). An install another account must read is + extracted: a download made as root or outside the installing + account's home extracts on its own, and nltk.download(..., + extract=True) / python -m nltk.downloader --extract (or + --no-extract) decide explicitly. This also unpacks the packages + the index leaves zipped (wordnet, omw-1.4 ...); the extracted + files are readable by every account and are found before the + archive. find() names an archive it cannot read and says how to + extract it instead of reporting it "not found". The downloader + installs only into directories no other account can write to, + treats an archive another account owns or can write to as stale + and downloads it afresh, extracts only from an archive no other + account could have changed since its checksum was verified, bounds + the size of what it fetches, and refuses index entries and archive + members that would write outside the package directory (PR #3929, + #3804, #3850, #3778) + - Pickles: nltk.data.load(..., format="pickle") reconstructs plain + data only; a pickle that names any class or function is refused. + Model loaders that need classes use an explicit allowlist of + audited globals, so a gadget such as os.system can never be + reconstructed from a model file. chat80 shelve values load the + same way (PR #3794, #3754, #3757, #3802, #3817, #3823, #3824) + - XML, JSON and YAML: nltk.xmlsec refuses any document that declares + an entity or references an external one (billion-laughs, + external-entity and DTD attacks) and bounds the tree depth, and + every corpus XML view, the downloader index, Toolbox and internals + parse through it. JSON resources load with a depth and size bound; + YAML (the markdown corpus front matter and nltk.data.load(..., + format="yaml")) loads through a bounded safe loader. Oversized or + too deeply nested input raises ValueError naming the limit (PR + #3754, #3805, #3828, #3933, #3972, #3974) + - Regular expressions (nltk.redos): every regular expression NLTK + compiles, including one you pass to RegexpTokenizer, + RegexpStemmer, RegexpParser, re_show, TokenSearcher.findall, + tgrep, nltk.help tag-set lookups and the concordance and nemo + GUIs, now goes through nltk.redos on the regex engine. A pattern + longer than 100,000 characters, nested more than 100 deep, with + more than 1,000 capturing groups or an excessive repetition + product is refused with nltk.redos.error, a subclass of re.error; + a match that runs longer than nltk.redos.DEFAULT_TIMEOUT (5 + seconds) raises TimeoutError instead of hanging. Patterns keep re + syntax; match objects are the regex engine's (PR #3825, #3829, + #3830, #3831, #3832, #3833, #3834, #3835, #3836, #3837, #3838, + #3839, #3840, #3841, #3842, #3843, #3844, #3845, #3846, #3796, + #3801, #3906, #3907, #3908, #3910) + - Regular expressions made linear: the leading-run and re-anchoring + patterns that a timeout cannot catch were rewritten or bounded in + the word, Treebank, blankline, TextTiling, toktok and syllable + tokenizers, the readline of corpus streams, the CoNLL SRL, TIMIT, + senseval, pl196x, NKJP, Alpino, YCOE, IEER, ACE, VerbNet, reviews + and Lin readers, relextract, the valuation parser, the CCG lexicon + parser, dependency grammars and chomsky_normal_form, each verified + on the real corpus (PR #3947, #3934, #3932, #3938, #3935, #3933, + #3869, #3944, #3911, #3909, #3953, #3895) + - Size, depth and time bounds: trees deeper than + nltk.tree.MAX_TREE_DEPTH (500), WordNet and other relation walks + deeper than nltk.util.MAX_RECURSION_DEPTH (500), tgrep deeper than + 50, Toolbox deeper than 500, dependency graphs deeper than 200, + are refused with ValueError naming the limit rather than + exhausting the stack, and the stemmers, distance metrics, + skipgrams, parsers and grammar transforms run in linear or bounded + time with identical output for legitimate input. chart_parse stops + after nltk.parse.chart.DEFAULT_MAX_TIME (5 seconds of wall-clock, + needed only for feature grammars; max_time=None disables it). + Tree.__repr__ no longer recurses, so a deep accepted tree prints + (PR #3827, #3885, #3895, #3767, #3784, #3917, #3958, #3960, #3977) + - External tools and Java: a tool binary is resolved from an + absolute path or a trusted search path only, never from the + current directory; the binary, its directory and the model and + data files handed to it must not be writable by another account + (symlinked and multi-call executables such as a packaged Graphviz + dot are supported). java() accepts a main class as the first + argument only (no -jar, @argfile or .java source file), validates + its options against an allowlist, and loads jars only from a data + root unless NLTK_ALLOW_UNSAFE_JARS=1 opts out with a warning. + CoreNLP server options are allowlisted. Stanford, Malt, Senna, + hunpos, Prover9, megam, TADM, Weka and crf wrappers validate their + paths and the text they pipe to the tool against line and argument + injection (PR #3772, #3771, #3975, #3743, #3782, #3788, #3768, + #3798, #3887, #3858, #3950, #3951, #3812, #3816, #3868, #3894, + #3941, #3850, #3925) + - Network: the downloader, nltk.data.load of a URL and the CHILDES + reader fetch through pathsec.urlopen, which refuses addresses that + are not globally routable (loopback, private, link-local and + multicast, including tunnelled and obfuscated forms), pins the + validated address for the connection, allows file:// with a local + authority only, and refuses a proxied fetch unless + NLTK_ALLOW_PROXIED_URLOPEN=1 (or nltk.pathsec.ALLOW_PROXIED_FETCH + = True) asserts the proxy is trusted. The CoreNLP client talks to + its local server with requests and is not affected (PR #3847, + #3810, #3750, #3850) + - Terminal, CSV, DOT and HTML output: every print in the library + goes through nltk.termsec.safe_print, which renders control + characters, escape sequences and unbalanced bidi overrides from + corpus text as visible \xNN escapes instead of letting them reach + the terminal. The CSV files the twitter and sentiment helpers + write neutralise formula-leading and control-sequence cells, + AlignedSent DOT labels are escaped, the WordNet browser escapes + corpus text, and nltk.data.load's verbose output no longer prints + the full resource URL (PR #3914, #3915, #3937, #3946, #3931, + #3930, #3856, #3902) + - Corpus stores and encodings: the PanLex Lite and chat80 sqlite + stores open read-only on a pinned descriptor with their schema + screened and a statement step budget, chat80 shelves are read by a + key manifest, Toolbox SFM markers are sanitised, and a resource + encoding that is not a text codec (bz2_codec and friends) is + refused (PR #3961, #3964, #3959, #3888, #3800, #3962) + - Package contents: the wheel no longer ships nltk.test.unit (the + attack harnesses, advisory probes and their fixtures), so pip + install nltk is about half the size and import nltk.test.unit + works from a source checkout or the sdist only. The doctests under + nltk.test still ship (PR #3954) + + ## Security test and CI infrastructure + - Attack and regression harnesses, advisory probes, the sandbox + conftest fixtures, the pre-commit guards (no unsandboxed open, + every regex through redos, every pickle through picklesec, every + print through safe_print), load-invariant CPU-time timing rules, + CI matrix and runner fixes, pinned third-party downloads, and the + AUTHORS update (PR #3744, #3749, #3762, #3764, #3770, #3776, + #3791, #3795, #3803, #3818, #3820, #3821, #3822, #3849, #3855, + #3860, #3861, #3862, #3864, #3865, #3866, #3876, #3884, #3899, + #3904, #3905, #3912, #3917, #3924, #3926, #3927, #3939, #3940, + #3943, #3948, #3949, #3963, #3968, #3971, #3976, #3982, #3983, + #3984, #3985) + + ## Other changes + - Added RTL language syntactic tree visualization support (PR #3472) + - Fix #3394: Ensure punkt_tab is downloaded when punkt is requested (PR #3505) + - Show README.md as the PyPI long description (PR #3746) + - Add stopwords.words("english-extended") (PR #3747) + - Krippendorff's alpha: treat placeholder labels as missing data (#2865, #2732) (PR #3752) + - Fix shared defaults in chat80 Concept (PR #3773) + - Fix Java wrappers decoding str output from java() (universal_newlines) (PR #3777) + - Prevent IndexError in Hungarian stemmer on empty string (PR #3785) + - Isolate MTE tag filters per view (PR #3792) + - Fix newline in ellipsis tokens in TweetTokenizer (PR #3819) + - Isolate default WordNet reference relations (PR #3872) + - Fix resolution paths that cancel distinct literals (PR #3878) + - Fix UTF-8 text preprocessing in NKJP corpus reader (PR #3879) + - Remove shadowed FeatStruct._walk stub and preserve its docstring (PR #3893) + - Count all increasing pairs in RIBES kendall_tau (PR #3900) + - Fix the TweetTokenizer ZWJ emoji pattern capturing adjacent whitespace (PR #3913) + - Surface the CoreNLP server's reason for a non-2xx answer (PR #3942) + - Omit unaligned (NULL target) pairs from Alignment strings, so IBM model output prints (PR #3967) + - Fix DependencyGraph cycle detection, which returned False on every parsed graph (PR #3978) + - Show, range and draw an alignment with an unaligned pair on every surface (PR #3987) + +------------------------------------------------------------------- Old: ---- nltk-3.10.3.obscpio New: ---- nltk-3.10.4.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-nltk.spec ++++++ --- /var/tmp/diff_new_pack.Qc1VIn/_old 2026-10-26 10:40:20.310969857 +0100 +++ /var/tmp/diff_new_pack.Qc1VIn/_new 2026-10-26 10:40:20.312969940 +0100 @@ -19,7 +19,7 @@ %define modname nltk %{?sle15_python_module_pythons} Name: python-nltk -Version: 3.10.3 +Version: 3.10.4 Release: 0 Summary: Natural Language Toolkit License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.Qc1VIn/_old 2026-10-26 10:40:20.349971485 +0100 +++ /var/tmp/diff_new_pack.Qc1VIn/_new 2026-10-26 10:40:20.352971611 +0100 @@ -3,8 +3,8 @@ <param name="url">https://github.com/nltk/nltk</param> <param name="scm">git</param> <param name="exclude">web/*</param> - <param name="version">3.10.3</param> - <param name="revision">v3.10.3</param> + <param name="version">3.10.4</param> + <param name="revision">v3.10.4</param> </service> <service mode="manual" name="set_version" /> <service mode="buildtime" name="tar" /> ++++++ nltk-3.10.3.obscpio -> nltk-3.10.4.obscpio ++++++ ++++ 132484 lines of diff (skipped) ++++++ nltk.obsinfo ++++++ --- /var/tmp/diff_new_pack.Qc1VIn/_old 2026-10-26 10:40:20.973997538 +0100 +++ /var/tmp/diff_new_pack.Qc1VIn/_new 2026-10-26 10:40:20.979997789 +0100 @@ -1,5 +1,5 @@ name: nltk -version: 3.10.3 -mtime: 1786571315 -commit: 303f6e2ba8e4548a5f54fd65d86bb5c9a949f1db +version: 3.10.4 +mtime: 1792579787 +commit: 5c41fc04a45e95577a83f3914acda211a994be00
