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
 

Reply via email to