Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package perl-HTTP-Tiny for openSUSE:Factory 
checked in at 2026-06-08 16:54:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-HTTP-Tiny (Old)
 and      /work/SRC/openSUSE:Factory/.perl-HTTP-Tiny.new.2375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-HTTP-Tiny"

Mon Jun  8 16:54:52 2026 rev:23 rq:1357974 version:0.096

Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-HTTP-Tiny/perl-HTTP-Tiny.changes    
2026-05-18 17:48:59.934737706 +0200
+++ /work/SRC/openSUSE:Factory/.perl-HTTP-Tiny.new.2375/perl-HTTP-Tiny.changes  
2026-06-08 16:54:56.281384246 +0200
@@ -1,0 +2,16 @@
+Mon Jun  8 09:57:24 UTC 2026 - Tina Müller <[email protected]>
+
+- updated to 0.096
+   see /usr/share/doc/packages/perl-HTTP-Tiny/Changes
+
+  0.096     2026-06-08 11:21:49+02:00 Europe/Brussels
+      - No changes from 0.095-TRIAL
+  0.095     2026-06-03 13:10:05+02:00 Europe/Brussels (TRIAL RELEASE)
+      [!!! SECURITY !!!]
+      - Caller-supplied C<Authorization>, C<Cookie>, and C<Proxy-Authorization>
+        headers are now stripped on cross-origin redirects by default. Use
+        allow_credentialed_redirects to opt out.
+      - Redirects are no longer automatically followed when going from https 
to http.
+        Use allow_downgrade to revert to the original behaviour.
+
+-------------------------------------------------------------------

Old:
----
  HTTP-Tiny-0.094.tar.gz

New:
----
  HTTP-Tiny-0.096.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-HTTP-Tiny.spec ++++++
--- /var/tmp/diff_new_pack.5F5B63/_old  2026-06-08 16:54:57.173421211 +0200
+++ /var/tmp/diff_new_pack.5F5B63/_new  2026-06-08 16:54:57.181421542 +0200
@@ -18,7 +18,7 @@
 
 %define cpan_name HTTP-Tiny
 Name:           perl-HTTP-Tiny
-Version:        0.094
+Version:        0.096
 Release:        0
 License:        Artistic-1.0 OR GPL-1.0-or-later
 Summary:        Small, simple, correct HTTP/1.1 client

++++++ HTTP-Tiny-0.094.tar.gz -> HTTP-Tiny-0.096.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/Changes new/HTTP-Tiny-0.096/Changes
--- old/HTTP-Tiny-0.094/Changes 2026-05-17 10:31:03.000000000 +0200
+++ new/HTTP-Tiny-0.096/Changes 2026-06-08 11:21:52.000000000 +0200
@@ -1,5 +1,19 @@
 Release notes for HTTP-Tiny
 
+0.096     2026-06-08 11:21:49+02:00 Europe/Brussels
+
+    - No changes from 0.095-TRIAL
+
+0.095     2026-06-03 13:10:05+02:00 Europe/Brussels (TRIAL RELEASE)
+    [!!! SECURITY !!!]
+
+    - Caller-supplied C<Authorization>, C<Cookie>, and C<Proxy-Authorization>
+      headers are now stripped on cross-origin redirects by default. Use
+      allow_credentialed_redirects to opt out.
+
+    - Redirects are no longer automatically followed when going from https to 
http.
+      Use allow_downgrade to revert to the original behaviour.
+
 0.094     2026-05-17 10:31:00+02:00 Europe/Brussels
 
     - No changes from 0.093-TRIAL
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/MANIFEST new/HTTP-Tiny-0.096/MANIFEST
--- old/HTTP-Tiny-0.094/MANIFEST        2026-05-17 10:31:03.000000000 +0200
+++ new/HTTP-Tiny-0.096/MANIFEST        2026-06-08 11:21:52.000000000 +0200
@@ -81,6 +81,20 @@
 corpus/redirect-08.txt
 corpus/redirect-09.txt
 corpus/redirect-10.txt
+corpus/redirect-11.txt
+corpus/redirect-12.txt
+corpus/redirect-13.txt
+corpus/redirect-14.txt
+corpus/redirect-15.txt
+corpus/redirect-16.txt
+corpus/redirect-17.txt
+corpus/redirect-18.txt
+corpus/redirect-19.txt
+corpus/redirect-20.txt
+corpus/redirect-21.txt
+corpus/redirect-22.txt
+corpus/redirect-23.txt
+corpus/redirect-24.txt
 corpus/snake-oil.crt
 cpanfile
 dist.ini
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/META.json 
new/HTTP-Tiny-0.096/META.json
--- old/HTTP-Tiny-0.094/META.json       2026-05-17 10:31:03.000000000 +0200
+++ new/HTTP-Tiny-0.096/META.json       2026-06-08 11:21:52.000000000 +0200
@@ -107,7 +107,7 @@
    "provides" : {
       "HTTP::Tiny" : {
          "file" : "lib/HTTP/Tiny.pm",
-         "version" : "0.094"
+         "version" : "0.096"
       }
    },
    "release_status" : "stable",
@@ -122,7 +122,7 @@
          "web" : "https://github.com/Perl-Toolchain-Gang/HTTP-Tiny";
       }
    },
-   "version" : "0.094",
+   "version" : "0.096",
    "x_authority" : "cpan:DAGOLDEN",
    "x_contributors" : [
       "Alan Gardner <[email protected]>",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/META.yml new/HTTP-Tiny-0.096/META.yml
--- old/HTTP-Tiny-0.094/META.yml        2026-05-17 10:31:03.000000000 +0200
+++ new/HTTP-Tiny-0.096/META.yml        2026-06-08 11:21:52.000000000 +0200
@@ -39,7 +39,7 @@
 provides:
   HTTP::Tiny:
     file: lib/HTTP/Tiny.pm
-    version: '0.094'
+    version: '0.096'
 recommends:
   HTTP::CookieJar: '0.001'
   IO::Socket::IP: '0.32'
@@ -61,7 +61,7 @@
   bugtracker: https://github.com/Perl-Toolchain-Gang/HTTP-Tiny/issues
   homepage: https://github.com/Perl-Toolchain-Gang/HTTP-Tiny
   repository: https://github.com/Perl-Toolchain-Gang/HTTP-Tiny.git
-version: '0.094'
+version: '0.096'
 x_authority: cpan:DAGOLDEN
 x_contributors:
   - 'Alan Gardner <[email protected]>'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/Makefile.PL 
new/HTTP-Tiny-0.096/Makefile.PL
--- old/HTTP-Tiny-0.094/Makefile.PL     2026-05-17 10:31:03.000000000 +0200
+++ new/HTTP-Tiny-0.096/Makefile.PL     2026-06-08 11:21:52.000000000 +0200
@@ -43,7 +43,7 @@
     "lib" => 0,
     "open" => 0
   },
-  "VERSION" => "0.094",
+  "VERSION" => "0.096",
   "test" => {
     "TESTS" => "t/*.t"
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/README new/HTTP-Tiny-0.096/README
--- old/HTTP-Tiny-0.094/README  2026-05-17 10:31:03.000000000 +0200
+++ new/HTTP-Tiny-0.096/README  2026-06-08 11:21:52.000000000 +0200
@@ -2,7 +2,7 @@
     HTTP::Tiny - A small, simple, correct HTTP/1.1 client
 
 VERSION
-    version 0.094
+    version 0.096
 
 SYNOPSIS
         use HTTP::Tiny;
@@ -41,9 +41,22 @@
     This constructor returns a new HTTP::Tiny object. Valid attributes
     include:
 
-    *   "agent" — A user-agent string (defaults to 'HTTP-Tiny/$VERSION'). If
-        "agent" — ends in a space character, the default user-agent string
-        is appended.
+    *   "agent" — A user-agent string (defaults to '"HTTP-Tiny/$VERSION"').
+        If "agent" — ends in a space character, the default user-agent
+        string is appended.
+
+    *   "allow_credentialed_redirects" - If a "3XX" redirects to a different
+        scheme, host or port, by default HTTP::Tiny will strip away
+        caller-supplied "Authorization", "Cookie" and "Proxy-Authorization"
+        headers from the redirected request and from all subsequent requests
+        in the chain. Set this to a true value to revert to the legacy
+        behavior of forwarding those headers. Default is "false".
+
+    *   "allow_downgrade" — If a "3XX" redirect changes the scheme from
+        "https" to plain "http", HTTP::Tiny will by default refuse to follow
+        it, returning the "3XX" response. Set this to a true value to revert
+        to the legacy behavior of redirecting "https" to "http". Default is
+        "false".
 
     *   "cookie_jar" — An instance of HTTP::CookieJar — or equivalent class
         that supports the "add" and "cookie_header" methods
@@ -130,7 +143,7 @@
     response.
 
     The "success" field of the response will be true if the status code is
-    2XX.
+    "2XX".
 
   post_form
         $response = $http->post_form($url, $form_data);
@@ -150,7 +163,7 @@
     will be ignored.
 
     The "success" field of the response will be true if the status code is
-    2XX.
+    "2XX".
 
   mirror
         $response = $http->mirror($url, $file, \%options)
@@ -166,7 +179,7 @@
     header yourself in the "$options->{headers}" hash.
 
     The "success" field of the response will be true if the status code is
-    2XX or if the status code is 304 (unmodified).
+    "2XX" or if the status code is 304 (unmodified).
 
     If the file was modified and the server response includes a properly
     formatted "Last-Modified" header, the file modification time will be
@@ -185,8 +198,7 @@
     this applies to redirection.
 
     If the URL includes a "user:password" stanza, they will be used for
-    Basic-style authorization headers. (Authorization headers will not be
-    included in a redirected request.) For example:
+    Basic-style authorization headers. For example:
 
         $http->request('GET', 'http://Aladdin:open [email protected]/');
 
@@ -195,6 +207,10 @@
 
         $http->request('GET', 
'http://john%40example.com:[email protected]/');
 
+    Caller-supplied "Authorization", "Cookie" and "Proxy-Authorization"
+    headers are stripped on cross-origin redirects. See "new"'s
+    "allow_credentialed_redirects" attribute to opt out.
+
     A hashref of options may be appended to modify the request.
 
     Valid options are:
@@ -249,8 +265,8 @@
     The "request" method returns a hashref containing the response. The
     hashref will have the following keys:
 
-    *   "success" — Boolean indicating whether the operation returned a 2XX
-        status code
+    *   "success" — Boolean indicating whether the operation returned a
+        "2XX" status code
 
     *   "url" — URL that provided the response. This is the URL of the
         request unless there were redirections, in which case it is the last
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/corpus/redirect-11.txt 
new/HTTP-Tiny-0.096/corpus/redirect-11.txt
--- old/HTTP-Tiny-0.094/corpus/redirect-11.txt  1970-01-01 01:00:00.000000000 
+0100
+++ new/HTTP-Tiny-0.096/corpus/redirect-11.txt  2026-06-08 11:21:52.000000000 
+0200
@@ -0,0 +1,21 @@
+url
+  https://victim.example/secret
+expected
+  refused-redirect-body
+expected_url
+  https://victim.example/secret
+----------
+GET /secret HTTP/1.1
+Host: victim.example
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 302 Found
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 21
+Location: http://victim.example/secret
+
+refused-redirect-body
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/corpus/redirect-12.txt 
new/HTTP-Tiny-0.096/corpus/redirect-12.txt
--- old/HTTP-Tiny-0.094/corpus/redirect-12.txt  1970-01-01 01:00:00.000000000 
+0100
+++ new/HTTP-Tiny-0.096/corpus/redirect-12.txt  2026-06-08 11:21:52.000000000 
+0200
@@ -0,0 +1,36 @@
+url
+  https://victim.example/secret
+expected
+  success
+expected_url
+  http://victim.example/secret
+new_args
+  allow_downgrade: 1
+----------
+GET /secret HTTP/1.1
+Host: victim.example
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 302 Found
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 8
+Location: http://victim.example/secret
+
+redirect
+
+----------
+GET /secret HTTP/1.1
+Host: victim.example
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 200 OK
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 7
+
+success
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/corpus/redirect-13.txt 
new/HTTP-Tiny-0.096/corpus/redirect-13.txt
--- old/HTTP-Tiny-0.094/corpus/redirect-13.txt  1970-01-01 01:00:00.000000000 
+0100
+++ new/HTTP-Tiny-0.096/corpus/redirect-13.txt  2026-06-08 11:21:52.000000000 
+0200
@@ -0,0 +1,35 @@
+url
+  https://example.com/index.html
+expected
+  abcdefghijklmnopqrstuvwxyz1234567890abcdef
+expected_url
+  https://example.com/index2.html
+----------
+GET /index.html HTTP/1.1
+Host: example.com
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 302 Found
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/html
+Content-Length: 53
+Location: https://example.com/index2.html
+
+<a href="https://example.com/index2.html";>redirect</a>
+
+----------
+GET /index2.html HTTP/1.1
+Host: example.com
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 200 OK
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 42
+
+abcdefghijklmnopqrstuvwxyz1234567890abcdef
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/corpus/redirect-14.txt 
new/HTTP-Tiny-0.096/corpus/redirect-14.txt
--- old/HTTP-Tiny-0.094/corpus/redirect-14.txt  1970-01-01 01:00:00.000000000 
+0100
+++ new/HTTP-Tiny-0.096/corpus/redirect-14.txt  2026-06-08 11:21:52.000000000 
+0200
@@ -0,0 +1,35 @@
+url
+  http://example.com/index.html
+expected
+  abcdefghijklmnopqrstuvwxyz1234567890abcdef
+expected_url
+  https://example.com/index2.html
+----------
+GET /index.html HTTP/1.1
+Host: example.com
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 302 Found
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/html
+Content-Length: 53
+Location: https://example.com/index2.html
+
+<a href="https://example.com/index2.html";>redirect</a>
+
+----------
+GET /index2.html HTTP/1.1
+Host: example.com
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 200 OK
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 42
+
+abcdefghijklmnopqrstuvwxyz1234567890abcdef
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/corpus/redirect-15.txt 
new/HTTP-Tiny-0.096/corpus/redirect-15.txt
--- old/HTTP-Tiny-0.094/corpus/redirect-15.txt  1970-01-01 01:00:00.000000000 
+0100
+++ new/HTTP-Tiny-0.096/corpus/redirect-15.txt  2026-06-08 11:21:52.000000000 
+0200
@@ -0,0 +1,57 @@
+url
+  http://victim.example/secret
+expected
+  pwned
+expected_url
+  http://victim.example/back
+headers
+  Authorization: Bearer SECRET-TOKEN
+  Cookie: session=SECRET-SESSION
+  Proxy-Authorization: Basic c2VjcmV0OnNlY3JldA==
+----------
+GET /secret HTTP/1.1
+Host: victim.example
+Authorization: Bearer SECRET-TOKEN
+Cookie: session=SECRET-SESSION
+Proxy-Authorization: Basic c2VjcmV0OnNlY3JldA==
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 302 Found
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 8
+Location: http://attacker.example/loot
+
+redirect
+
+----------
+GET /loot HTTP/1.1
+Host: attacker.example
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 302 Found
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 8
+Location: http://victim.example/back
+
+redirect
+
+----------
+GET /back HTTP/1.1
+Host: victim.example
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 200 OK
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 5
+
+pwned
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/corpus/redirect-16.txt 
new/HTTP-Tiny-0.096/corpus/redirect-16.txt
--- old/HTTP-Tiny-0.094/corpus/redirect-16.txt  1970-01-01 01:00:00.000000000 
+0100
+++ new/HTTP-Tiny-0.096/corpus/redirect-16.txt  2026-06-08 11:21:52.000000000 
+0200
@@ -0,0 +1,47 @@
+url
+  http://victim.example/secret
+expected
+  pwned
+expected_url
+  http://attacker.example/loot
+new_args
+  allow_credentialed_redirects: 1
+headers
+  Authorization: Bearer SECRET-TOKEN
+  Cookie: session=SECRET-SESSION
+  Proxy-Authorization: Basic c2VjcmV0OnNlY3JldA==
+----------
+GET /secret HTTP/1.1
+Host: victim.example
+Authorization: Bearer SECRET-TOKEN
+Cookie: session=SECRET-SESSION
+Proxy-Authorization: Basic c2VjcmV0OnNlY3JldA==
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 302 Found
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 8
+Location: http://attacker.example/loot
+
+redirect
+
+----------
+GET /loot HTTP/1.1
+Host: attacker.example
+Authorization: Bearer SECRET-TOKEN
+Cookie: session=SECRET-SESSION
+Proxy-Authorization: Basic c2VjcmV0OnNlY3JldA==
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 200 OK
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 5
+
+pwned
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/corpus/redirect-17.txt 
new/HTTP-Tiny-0.096/corpus/redirect-17.txt
--- old/HTTP-Tiny-0.094/corpus/redirect-17.txt  1970-01-01 01:00:00.000000000 
+0100
+++ new/HTTP-Tiny-0.096/corpus/redirect-17.txt  2026-06-08 11:21:52.000000000 
+0200
@@ -0,0 +1,39 @@
+url
+  http://example.com/a
+expected
+  ok
+expected_url
+  http://example.com/b
+headers
+  Authorization: Bearer SECRET-TOKEN
+----------
+GET /a HTTP/1.1
+Host: example.com
+Authorization: Bearer SECRET-TOKEN
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 302 Found
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 8
+Location: http://example.com/b
+
+redirect
+
+----------
+GET /b HTTP/1.1
+Host: example.com
+Authorization: Bearer SECRET-TOKEN
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 200 OK
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 2
+
+ok
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/corpus/redirect-18.txt 
new/HTTP-Tiny-0.096/corpus/redirect-18.txt
--- old/HTTP-Tiny-0.094/corpus/redirect-18.txt  1970-01-01 01:00:00.000000000 
+0100
+++ new/HTTP-Tiny-0.096/corpus/redirect-18.txt  2026-06-08 11:21:52.000000000 
+0200
@@ -0,0 +1,38 @@
+url
+  http://example.com:8080/foo
+expected
+  ok
+expected_url
+  http://example.com:8081/bar
+headers
+  Authorization: Bearer SECRET-TOKEN
+----------
+GET /foo HTTP/1.1
+Host: example.com:8080
+Authorization: Bearer SECRET-TOKEN
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 302 Found
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 8
+Location: http://example.com:8081/bar
+
+redirect
+
+----------
+GET /bar HTTP/1.1
+Host: example.com:8081
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 200 OK
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 2
+
+ok
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/corpus/redirect-19.txt 
new/HTTP-Tiny-0.096/corpus/redirect-19.txt
--- old/HTTP-Tiny-0.094/corpus/redirect-19.txt  1970-01-01 01:00:00.000000000 
+0100
+++ new/HTTP-Tiny-0.096/corpus/redirect-19.txt  2026-06-08 11:21:52.000000000 
+0200
@@ -0,0 +1,40 @@
+url
+  https://example.com:8443/foo
+expected
+  ok
+expected_url
+  http://example.com:8443/foo
+new_args
+  allow_downgrade: 1
+headers
+  Authorization: Bearer SECRET-TOKEN
+----------
+GET /foo HTTP/1.1
+Host: example.com:8443
+Authorization: Bearer SECRET-TOKEN
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 302 Found
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 8
+Location: http://example.com:8443/foo
+
+redirect
+
+----------
+GET /foo HTTP/1.1
+Host: example.com:8443
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 200 OK
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 2
+
+ok
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/corpus/redirect-20.txt 
new/HTTP-Tiny-0.096/corpus/redirect-20.txt
--- old/HTTP-Tiny-0.094/corpus/redirect-20.txt  1970-01-01 01:00:00.000000000 
+0100
+++ new/HTTP-Tiny-0.096/corpus/redirect-20.txt  2026-06-08 11:21:52.000000000 
+0200
@@ -0,0 +1,41 @@
+url
+  http://victim.example/submit
+method
+  POST
+expected
+  ok
+expected_url
+  http://attacker.example/loot
+headers
+  Authorization: Bearer SECRET-TOKEN
+----------
+POST /submit HTTP/1.1
+Host: victim.example
+Authorization: Bearer SECRET-TOKEN
+Connection: close
+Content-Length: 0
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 303 See Other
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 8
+Location: http://attacker.example/loot
+
+redirect
+
+----------
+GET /loot HTTP/1.1
+Host: attacker.example
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 200 OK
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 2
+
+ok
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/corpus/redirect-21.txt 
new/HTTP-Tiny-0.096/corpus/redirect-21.txt
--- old/HTTP-Tiny-0.094/corpus/redirect-21.txt  1970-01-01 01:00:00.000000000 
+0100
+++ new/HTTP-Tiny-0.096/corpus/redirect-21.txt  2026-06-08 11:21:52.000000000 
+0200
@@ -0,0 +1,38 @@
+url
+  https://victim.example/x
+expected
+  pwned
+expected_url
+  https://attacker.example/loot
+headers
+  Authorization: Bearer TRUSTED-TOKEN
+----------
+GET /x HTTP/1.1
+Host: victim.example
+Authorization: Bearer TRUSTED-TOKEN
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 302 Found
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 8
+Location: //attacker.example/loot
+
+redirect
+
+----------
+GET /loot HTTP/1.1
+Host: attacker.example
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 200 OK
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 5
+
+pwned
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/corpus/redirect-22.txt 
new/HTTP-Tiny-0.096/corpus/redirect-22.txt
--- old/HTTP-Tiny-0.094/corpus/redirect-22.txt  1970-01-01 01:00:00.000000000 
+0100
+++ new/HTTP-Tiny-0.096/corpus/redirect-22.txt  2026-06-08 11:21:52.000000000 
+0200
@@ -0,0 +1,40 @@
+url
+  http://example.com/login
+expected
+  ok
+expected_url
+  https://example.com/login
+headers
+  Authorization: Bearer SECRET-TOKEN
+  Cookie: session=SECRET-SESSION
+----------
+GET /login HTTP/1.1
+Host: example.com
+Authorization: Bearer SECRET-TOKEN
+Cookie: session=SECRET-SESSION
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 302 Found
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 8
+Location: https://example.com/login
+
+redirect
+
+----------
+GET /login HTTP/1.1
+Host: example.com
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 200 OK
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 2
+
+ok
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/corpus/redirect-23.txt 
new/HTTP-Tiny-0.096/corpus/redirect-23.txt
--- old/HTTP-Tiny-0.094/corpus/redirect-23.txt  1970-01-01 01:00:00.000000000 
+0100
+++ new/HTTP-Tiny-0.096/corpus/redirect-23.txt  2026-06-08 11:21:52.000000000 
+0200
@@ -0,0 +1,36 @@
+url
+  https://user:[email protected]/secret
+expected
+  ok
+expected_url
+  https://attacker.example/loot
+----------
+GET /secret HTTP/1.1
+Host: victim.example
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+Authorization: Basic dXNlcjpwYXNz
+
+----------
+HTTP/1.1 302 Found
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 8
+Location: https://attacker.example/loot
+
+redirect
+
+----------
+GET /loot HTTP/1.1
+Host: attacker.example
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 200 OK
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 2
+
+ok
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/corpus/redirect-24.txt 
new/HTTP-Tiny-0.096/corpus/redirect-24.txt
--- old/HTTP-Tiny-0.094/corpus/redirect-24.txt  1970-01-01 01:00:00.000000000 
+0100
+++ new/HTTP-Tiny-0.096/corpus/redirect-24.txt  2026-06-08 11:21:52.000000000 
+0200
@@ -0,0 +1,38 @@
+url
+  https://user:[email protected]/secret
+expected
+  ok
+expected_url
+  https://attacker.example/loot
+new_args
+  allow_credentialed_redirects: 1
+----------
+GET /secret HTTP/1.1
+Host: victim.example
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+Authorization: Basic dXNlcjpwYXNz
+
+----------
+HTTP/1.1 302 Found
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 8
+Location: https://attacker.example/loot
+
+redirect
+
+----------
+GET /loot HTTP/1.1
+Host: attacker.example
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 200 OK
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 2
+
+ok
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/dist.ini new/HTTP-Tiny-0.096/dist.ini
--- old/HTTP-Tiny-0.094/dist.ini        2026-05-17 10:31:03.000000000 +0200
+++ new/HTTP-Tiny-0.096/dist.ini        2026-06-08 11:21:52.000000000 +0200
@@ -12,7 +12,6 @@
 stopwords = UA
 stopwords = proxying
 stopwords = Tunnelling
-stopwords = 2XX
 stopwords = RFC7230
 stopwords = RFC7231
 stopwords = RFC7232
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/lib/HTTP/Tiny.pm 
new/HTTP-Tiny-0.096/lib/HTTP/Tiny.pm
--- old/HTTP-Tiny-0.094/lib/HTTP/Tiny.pm        2026-05-17 10:31:03.000000000 
+0200
+++ new/HTTP-Tiny-0.096/lib/HTTP/Tiny.pm        2026-06-08 11:21:52.000000000 
+0200
@@ -4,7 +4,7 @@
 use warnings;
 # ABSTRACT: A small, simple, correct HTTP/1.1 client
 
-our $VERSION = '0.094';
+our $VERSION = '0.096';
 
 sub _croak { require Carp; Carp::croak(@_) }
 
@@ -15,9 +15,19 @@
 #pod This constructor returns a new HTTP::Tiny object.  Valid attributes 
include:
 #pod
 #pod =for :list
-#pod * C<agent> — A user-agent string (defaults to 'HTTP-Tiny/$VERSION'). If
+#pod * C<agent> — A user-agent string (defaults to 'C<HTTP-Tiny/$VERSION>'). If
 #pod   C<agent> — ends in a space character, the default user-agent string is
 #pod   appended.
+#pod * C<allow_credentialed_redirects> - If a C<3XX> redirects to a different 
scheme,
+#pod   host or port, by default HTTP::Tiny will strip away caller-supplied
+#pod   C<Authorization>, C<Cookie> and C<Proxy-Authorization> headers from the
+#pod   redirected request and from all subsequent requests in the chain. Set 
this to a
+#pod   true value to revert to the legacy behavior of forwarding those headers.
+#pod   Default is C<false>.
+#pod * C<allow_downgrade> — If a C<3XX> redirect changes the scheme from 
C<https> to
+#pod   plain C<http>, HTTP::Tiny will by default refuse to follow it, 
returning the
+#pod   C<3XX> response. Set this to a true value to revert to the legacy 
behavior of
+#pod   redirecting C<https> to C<http>. Default is C<false>.
 #pod * C<cookie_jar> — An instance of L<HTTP::CookieJar> — or equivalent class
 #pod   that supports the C<add> and C<cookie_header> methods
 #pod * C<default_headers> — A hashref of default headers to apply to requests
@@ -81,9 +91,9 @@
 my @attributes;
 BEGIN {
     @attributes = qw(
-        cookie_jar default_headers http_proxy https_proxy keep_alive
-        local_address max_redirect max_size proxy no_proxy
-        SSL_options verify_SSL
+        allow_credentialed_redirects allow_downgrade cookie_jar default_headers
+        http_proxy https_proxy keep_alive local_address max_redirect max_size
+        proxy no_proxy SSL_options verify_SSL
     );
     my %persist_ok = map {; $_ => 1 } qw(
         cookie_jar default_headers max_redirect max_size
@@ -227,7 +237,7 @@
 #pod URL must have unsafe characters escaped and international domain names 
encoded.
 #pod See C<request()> for valid options and a description of the response.
 #pod
-#pod The C<success> field of the response will be true if the status code is 
2XX.
+#pod The C<success> field of the response will be true if the status code is 
C<2XX>.
 #pod
 #pod =cut
 
@@ -260,7 +270,7 @@
 #pod encoded.  See C<request()> for valid options and a description of the 
response.
 #pod Any C<content-type> header or content in the options hashref will be 
ignored.
 #pod
-#pod The C<success> field of the response will be true if the status code is 
2XX.
+#pod The C<success> field of the response will be true if the status code is 
C<2XX>.
 #pod
 #pod =cut
 
@@ -301,8 +311,8 @@
 #pod may specify a different C<If-Modified-Since> header yourself in the C<<
 #pod $options->{headers} >> hash.
 #pod
-#pod The C<success> field of the response will be true if the status code is 
2XX
-#pod or if the status code is 304 (unmodified).
+#pod The C<success> field of the response will be true if the status code is 
C<2XX>
+#pod or if the status code is C<304> (unmodified).
 #pod
 #pod If the file was modified and the server response includes a properly
 #pod formatted C<Last-Modified> header, the file modification time will
@@ -364,8 +374,7 @@
 #pod how this applies to redirection.
 #pod
 #pod If the URL includes a "user:password" stanza, they will be used for 
Basic-style
-#pod authorization headers.  (Authorization headers will not be included in a
-#pod redirected request.) For example:
+#pod authorization headers.  For example:
 #pod
 #pod     $http->request('GET', 'http://Aladdin:open [email protected]/');
 #pod
@@ -374,6 +383,10 @@
 #pod
 #pod     $http->request('GET', 
'http://john%40example.com:[email protected]/');
 #pod
+#pod Caller-supplied C<Authorization>, C<Cookie> and C<Proxy-Authorization> 
headers
+#pod are stripped on cross-origin redirects. See L</new>'s
+#pod C<allow_credentialed_redirects> attribute to opt out.
+#pod
 #pod A hashref of options may be appended to modify the request.
 #pod
 #pod Valid options are:
@@ -427,7 +440,7 @@
 #pod
 #pod =for :list
 #pod * C<success> —
-#pod     Boolean indicating whether the operation returned a 2XX status code
+#pod     Boolean indicating whether the operation returned a C<2XX> status code
 #pod * C<url> —
 #pod     URL that provided the response. This is the URL of the request unless
 #pod     there were redirections, in which case it is the last URL queried
@@ -458,6 +471,7 @@
 #pod =cut
 
 my %idempotent = map { $_ => 1 } qw/GET HEAD PUT DELETE OPTIONS TRACE/;
+my %sensitive_headers = map { $_ => 1 } qw/authorization cookie 
proxy-authorization/;
 
 sub request {
     my ($self, $method, $url, $args) = @_;
@@ -842,6 +856,7 @@
     for ($self->{default_headers}, $args->{headers}) {
         next unless defined;
         while (my ($k, $v) = each %$_) {
+            next if $args->{_strip_credentials} && exists 
$sensitive_headers{lc $k};
             $request->{headers}{lc $k} = $v;
             $request->{header_case}{lc $k} = $k;
         }
@@ -969,9 +984,24 @@
         and $headers->{location}
         and @{$args->{_redirects}} < $self->{max_redirect}
     ) {
-        my $location = ($headers->{location} =~ /^\//)
+        my $location = $headers->{location} =~ m{^//}
+        ? "$request->{scheme}:$headers->{location}"
+        : $headers->{location} =~ m{^/}
             ? "$request->{scheme}://$request->{host_port}$headers->{location}"
-            : $headers->{location} ;
+            : $headers->{location};
+        my ($to_scheme, $to_host, $to_port) = $self->_split_url($location);
+        if (!$self->{allow_downgrade} && $request->{scheme} eq 'https' && 
$to_scheme eq 'http' ) {
+            return;
+        }
+        if (
+            !$self->{allow_credentialed_redirects}
+            && (   $request->{scheme} ne $to_scheme
+                || $request->{host} ne $to_host
+                || $request->{port} ne $to_port )
+        ) {
+            $args->{_strip_credentials} = 1;
+        }
+
         return (($status eq '303' ? 'GET' : $method), $location);
     }
     return;
@@ -1776,7 +1806,7 @@
 
 =head1 VERSION
 
-version 0.094
+version 0.096
 
 =head1 SYNOPSIS
 
@@ -1821,7 +1851,15 @@
 
 =item *
 
-C<agent> — A user-agent string (defaults to 'HTTP-Tiny/$VERSION'). If C<agent> 
— ends in a space character, the default user-agent string is appended.
+C<agent> — A user-agent string (defaults to 'C<HTTP-Tiny/$VERSION>'). If 
C<agent> — ends in a space character, the default user-agent string is appended.
+
+=item *
+
+C<allow_credentialed_redirects> - If a C<3XX> redirects to a different scheme, 
host or port, by default HTTP::Tiny will strip away caller-supplied 
C<Authorization>, C<Cookie> and C<Proxy-Authorization> headers from the 
redirected request and from all subsequent requests in the chain. Set this to a 
true value to revert to the legacy behavior of forwarding those headers. 
Default is C<false>.
+
+=item *
+
+C<allow_downgrade> — If a C<3XX> redirect changes the scheme from C<https> to 
plain C<http>, HTTP::Tiny will by default refuse to follow it, returning the 
C<3XX> response. Set this to a true value to revert to the legacy behavior of 
redirecting C<https> to C<http>. Default is C<false>.
 
 =item *
 
@@ -1919,7 +1957,7 @@
 URL must have unsafe characters escaped and international domain names encoded.
 See C<request()> for valid options and a description of the response.
 
-The C<success> field of the response will be true if the status code is 2XX.
+The C<success> field of the response will be true if the status code is C<2XX>.
 
 =head2 post_form
 
@@ -1937,7 +1975,7 @@
 encoded.  See C<request()> for valid options and a description of the response.
 Any C<content-type> header or content in the options hashref will be ignored.
 
-The C<success> field of the response will be true if the status code is 2XX.
+The C<success> field of the response will be true if the status code is C<2XX>.
 
 =head2 mirror
 
@@ -1953,8 +1991,8 @@
 may specify a different C<If-Modified-Since> header yourself in the C<<
 $options->{headers} >> hash.
 
-The C<success> field of the response will be true if the status code is 2XX
-or if the status code is 304 (unmodified).
+The C<success> field of the response will be true if the status code is C<2XX>
+or if the status code is C<304> (unmodified).
 
 If the file was modified and the server response includes a properly
 formatted C<Last-Modified> header, the file modification time will
@@ -1974,8 +2012,7 @@
 how this applies to redirection.
 
 If the URL includes a "user:password" stanza, they will be used for Basic-style
-authorization headers.  (Authorization headers will not be included in a
-redirected request.) For example:
+authorization headers.  For example:
 
     $http->request('GET', 'http://Aladdin:open [email protected]/');
 
@@ -1984,6 +2021,10 @@
 
     $http->request('GET', 'http://john%40example.com:[email protected]/');
 
+Caller-supplied C<Authorization>, C<Cookie> and C<Proxy-Authorization> headers
+are stripped on cross-origin redirects. See L</new>'s
+C<allow_credentialed_redirects> attribute to opt out.
+
 A hashref of options may be appended to modify the request.
 
 Valid options are:
@@ -2041,7 +2082,7 @@
 
 =item *
 
-C<success> — Boolean indicating whether the operation returned a 2XX status 
code
+C<success> — Boolean indicating whether the operation returned a C<2XX> status 
code
 
 =item *
 
@@ -2121,6 +2162,8 @@
 
 =for Pod::Coverage SSL_options
 agent
+allow_credentialed_redirects
+allow_downgrade
 cookie_jar
 default_headers
 http_proxy
@@ -2336,10 +2379,10 @@
 =item *
 
 Redirection is very strict against the specification.  Redirection is only
-automatic for response codes 301, 302, 307 and 308 if the request method is
-'GET' or 'HEAD'.  Response code 303 is always converted into a 'GET'
-redirection, as mandated by the specification.  There is no automatic support
-for status 305 ("Use proxy") redirections.
+automatic for response codes C<301>, C<302>, C<307> and C<308> if the request
+method is 'GET' or 'HEAD'.  Response code C<303> is always converted into a
+'GET' redirection, as mandated by the specification.  There is no automatic
+support for status C<305> ("Use proxy") redirections.
 
 =item *
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/t/001_api.t 
new/HTTP-Tiny-0.096/t/001_api.t
--- old/HTTP-Tiny-0.094/t/001_api.t     2026-05-17 10:31:03.000000000 +0200
+++ new/HTTP-Tiny-0.096/t/001_api.t     2026-06-08 11:21:52.000000000 +0200
@@ -7,8 +7,9 @@
 use HTTP::Tiny;
 
 my @accessors = qw(
-  agent default_headers http_proxy https_proxy keep_alive local_address
-  max_redirect max_size proxy no_proxy timeout SSL_options verify_SSL 
cookie_jar
+    agent allow_credentialed_redirects allow_downgrade default_headers 
http_proxy
+    https_proxy keep_alive local_address max_redirect max_size proxy no_proxy 
timeout
+    SSL_options verify_SSL cookie_jar
 );
 my @methods   = qw(
   new get head put post patch delete post_form request mirror 
www_form_urlencode can_ssl
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/HTTP-Tiny-0.094/xt/author/pod-spell.t 
new/HTTP-Tiny-0.096/xt/author/pod-spell.t
--- old/HTTP-Tiny-0.094/xt/author/pod-spell.t   2026-05-17 10:31:03.000000000 
+0200
+++ new/HTTP-Tiny-0.096/xt/author/pod-spell.t   2026-06-08 11:21:52.000000000 
+0200
@@ -10,7 +10,6 @@
 add_stopwords(<DATA>);
 all_pod_files_spelling_ok( qw( bin lib ) );
 __DATA__
-2XX
 Alan
 Alders
 Alessandro

++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.5F5B63/_old  2026-06-08 16:54:57.545436627 +0200
+++ /var/tmp/diff_new_pack.5F5B63/_new  2026-06-08 16:54:57.561437290 +0200
@@ -1,6 +1,6 @@
-mtime: 1779097238
-commit: 649629c19d0f92d28444356031b724e8e8328508a3863e13ef025463c2391765
+mtime: 1780912645
+commit: 74164c707b14e62b68474eab69830a01acb3bef6e038044e2c5a1c9027754b7c
 url: https://src.opensuse.org/perl/perl-HTTP-Tiny
-revision: 649629c19d0f92d28444356031b724e8e8328508a3863e13ef025463c2391765
+revision: 74164c707b14e62b68474eab69830a01acb3bef6e038044e2c5a1c9027754b7c
 projectscmsync: https://src.opensuse.org/perl/_ObsPrj
 

++++++ build.specials.obscpio ++++++

++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore      1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore      2026-06-08 11:57:25.000000000 +0200
@@ -0,0 +1 @@
+.osc

Reply via email to