Package: libpaper-utils
Version: 2.2.5-0.3+b2
Severity: normal
File: /usr/sbin/paperconfig
The /usr/sbin/paperconfig script uses an internal shell variable
named PAPERSIZE, which contains the full path to a papersize file.
This usage conflicts with the environment variable of the same name,
which according to the paper(1) man page, does not contain such a path,
but instead contains the name of a particular media size to be used.
The collision can be demonstrated with a simple sequence of commands:
#!/bin/bash
# Simple setup, to clarify the output.
PATH=/usr/bin:/usr/sbin
LINE=--------------------------------
# Log the commands used in this test.
set -x
# First clear any inherited value in the environment,
# and prove that the clearing has actually occurred.
( set +x; echo $LINE ) 2>/dev/null
printenv PAPERSIZE
export -n PAPERSIZE
printenv PAPERSIZE
# Look at the default paper size.
( set +x; echo $LINE ) 2>/dev/null
paper
paperconf
paperconfig
# Set the paper size to a known non-default value.
( set +x; echo $LINE ) 2>/dev/null
export PAPERSIZE=Letter
# Look to see what effect that environment variable has.
( set +x; echo $LINE ) 2>/dev/null
paper
paperconf
paperconfig
# End this test.
( set +x; echo $LINE ) 2>/dev/null
Here's the output I get from that script, when run in my local
Debian 13.7 context:
--------------------------------
+ printenv PAPERSIZE
Letter
+ export -n PAPERSIZE
+ printenv PAPERSIZE
--------------------------------
+ paper
A4: 210x297 mm
+ paperconf
a4
+ paperconfig
A4
--------------------------------
+ export PAPERSIZE=Letter
+ PAPERSIZE=Letter
--------------------------------
+ paper
Letter: 8.5x11 in
+ paperconf
letter
+ paperconfig
/usr/bin/paper: unknown paper '/etc/papersize'
--------------------------------
It's the output from that last paperconfig command that shows the problem.
Compare that to the earlier output from paperconfig when the PAPERSIZE
environment variable was not set.
Recommended fix:
Change all references to the PAPERSIZE shell variable within the
paperconfig script to be PAPERSIZEFILE instead. This will in fact fit
the actual semantics of that shell variable, which holds a filepath
in contrast to the environment variable of the same original name,
which holds a media-size name.
sed --in-place -e "s/PAPERSIZE/PAPERSIZEFILE/g" paperconfig
-- System Information:
Debian Release: 13.7
APT prefers stable-updates
APT policy: (500, 'stable-updates'), (500, 'stable-security'), (500, 'stable')
Architecture: amd64 (x86_64)
Kernel: Linux 6.12.111+deb13-amd64 (SMP w/4 CPU threads; PREEMPT)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=ANSI_X3.4-1968)
(ignored: LC_ALL set to C), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
Versions of packages libpaper-utils depends on:
ii libc6 2.41-12+deb13u4
ii libpaper2 2.2.5-0.3+b2
ii sensible-utils 0.0.25
libpaper-utils recommends no packages.
libpaper-utils suggests no packages.
-- no debconf information