all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [PATCH proxmox-backup] fix #7382: correctly anchor nested paths for include/exclude patterns.
@ 2026-03-16 12:04 Manuel Federanko
  2026-03-16 12:58 ` Nicolas Frey
  0 siblings, 1 reply; 2+ messages in thread
From: Manuel Federanko @ 2026-03-16 12:04 UTC (permalink / raw)
  To: pbs-devel

A pattern in a subdirectory would be built by just prepending the parent
directory. This could break anchored patterns, which wouldn't match if
the parent directory didn't start with a slash.
Fixed this by explicitly checking if the base path starts with a slash
and prepending it if it does not exist.

It worked for anchored patterns in the root backup directory because
here the pattern is "" + "/exclude".

old:
match_path = /level0/level1/exclude
pattern = level0/level1/exclude

new:
match_path = /level0/level1/exclude
pattern = /level0/level1/exclude

Tested by creating a directory structure as described in the bug ticket
and verifying the behavior.

Signed-off-by: Manuel Federanko <m.federanko@proxmox.com>
---
 pbs-client/src/pxar/create.rs | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/pbs-client/src/pxar/create.rs b/pbs-client/src/pxar/create.rs
index 7f605a61..cec47749 100644
--- a/pbs-client/src/pxar/create.rs
+++ b/pbs-client/src/pxar/create.rs
@@ -537,13 +537,20 @@ impl Archiver {
 
             let mut buf;
             let (line, mode, anchored) = if line[0] == b'/' {
-                buf = Vec::with_capacity(path_bytes.len() + 1 + line.len());
+                buf = Vec::with_capacity(path_bytes.len() + 2 + line.len());
+                // need to anchor the base path if it is not
+                if path_bytes.len() > 0 && path_bytes[0] != b'/' {
+                    buf.push(b'/');
+                }
                 buf.extend(path_bytes);
                 buf.extend(line);
                 (&buf[..], MatchType::Exclude, true)
             } else if line.starts_with(b"!/") {
                 // inverted case with absolute path
-                buf = Vec::with_capacity(path_bytes.len() + line.len());
+                buf = Vec::with_capacity(path_bytes.len() + 1 + line.len());
+                if path_bytes.len() > 0 && path_bytes[0] != b'/' {
+                    buf.push(b'/');
+                }
                 buf.extend(path_bytes);
                 buf.extend(&line[1..]); // without the '!'
                 (&buf[..], MatchType::Include, true)
-- 
2.47.3




^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH proxmox-backup] fix #7382: correctly anchor nested paths for include/exclude patterns.
  2026-03-16 12:04 [PATCH proxmox-backup] fix #7382: correctly anchor nested paths for include/exclude patterns Manuel Federanko
@ 2026-03-16 12:58 ` Nicolas Frey
  0 siblings, 0 replies; 2+ messages in thread
From: Nicolas Frey @ 2026-03-16 12:58 UTC (permalink / raw)
  To: pbs-devel

Hi, thanks for the patch! nit inline

On 3/16/26 1:04 PM, Manuel Federanko wrote:
> A pattern in a subdirectory would be built by just prepending the parent
> directory. This could break anchored patterns, which wouldn't match if
> the parent directory didn't start with a slash.
> Fixed this by explicitly checking if the base path starts with a slash
> and prepending it if it does not exist.
> 
> It worked for anchored patterns in the root backup directory because
> here the pattern is "" + "/exclude".
> 
> old:
> match_path = /level0/level1/exclude
> pattern = level0/level1/exclude
> 
> new:
> match_path = /level0/level1/exclude
> pattern = /level0/level1/exclude
> 
> Tested by creating a directory structure as described in the bug ticket
> and verifying the behavior.
> 

nit: consider adding a Fixes trailer to reference the bug report, like so:

Fixes: https://bugzilla.proxmox.com/show_bug.cgi?id=7382

> Signed-off-by: Manuel Federanko <m.federanko@proxmox.com>
> ---
>  pbs-client/src/pxar/create.rs | 11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/pbs-client/src/pxar/create.rs b/pbs-client/src/pxar/create.rs
> index 7f605a61..cec47749 100644
> --- a/pbs-client/src/pxar/create.rs
> +++ b/pbs-client/src/pxar/create.rs
> @@ -537,13 +537,20 @@ impl Archiver {
>  
>              let mut buf;
>              let (line, mode, anchored) = if line[0] == b'/' {
> -                buf = Vec::with_capacity(path_bytes.len() + 1 + line.len());
> +                buf = Vec::with_capacity(path_bytes.len() + 2 + line.len());
> +                // need to anchor the base path if it is not
> +                if path_bytes.len() > 0 && path_bytes[0] != b'/' {
> +                    buf.push(b'/');
> +                }
>                  buf.extend(path_bytes);
>                  buf.extend(line);
>                  (&buf[..], MatchType::Exclude, true)
>              } else if line.starts_with(b"!/") {
>                  // inverted case with absolute path
> -                buf = Vec::with_capacity(path_bytes.len() + line.len());
> +                buf = Vec::with_capacity(path_bytes.len() + 1 + line.len());
> +                if path_bytes.len() > 0 && path_bytes[0] != b'/' {
> +                    buf.push(b'/');
> +                }
>                  buf.extend(path_bytes);
>                  buf.extend(&line[1..]); // without the '!'
>                  (&buf[..], MatchType::Include, true)

other than that, LGTM. Consider this:

Reviewed-by: Nicolas Frey <n.frey@proxmox.com>




^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-03-16 12:58 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-03-16 12:04 [PATCH proxmox-backup] fix #7382: correctly anchor nested paths for include/exclude patterns Manuel Federanko
2026-03-16 12:58 ` Nicolas Frey

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal