bug#81225: pr: +0 is interpreted as file name

Pádraig Brady <[email protected]> Fri, 12 Jun 2026 13:27:04 +0100
Newsgroups gmane.comp.gnu.core-utils.bugs
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------wOXj1yex0TO6wwNWyF16gT9J
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit

On 12/06/2026 09:37, Daniel Hofstetter wrote:
> Hi,
> 
> I noticed that pr interprets +0 as a file name and not as +FIRST_PAGE.
> And so a "no such file" error is shown whereas --pages=0 shows an
> "invalid page range" error.
> 
> $ echo "foo" > foo
> $ pr +0 foo
> pr: +0: No such file or directory
> [snipped pr output of the "foo" file]
> $ pr --pages=0 foo
> pr: invalid page range ‘0’
> 
> I'm using coreutils 9.11.

+... could be a file name, so we treat +<invalid page> as a file
since: https://github.com/coreutils/coreutils/commit/48eaa7382

--pages=0 is diagnosed directly as an invalid range
as there can be no ambiguity there.

So the inconsistency is due to a feature,
allowing users to `pr +foo --option` for example.

Adjusting this now could introduce some breakage,
and I don't see much benefit to changing this.

Oh this is probably coming from uutils
partially supporting the fallback.
It would be good to give that context when reporting bugs.

I've pushed the attached test to the GNU test suite,
to verify this handling.

Marking this as done.

thanks,
Padraig
--------------wOXj1yex0TO6wwNWyF16gT9J
Content-Type: text/x-patch; charset=UTF-8; name="pr-invalid-pages.patch"
Content-Disposition: attachment; filename="pr-invalid-pages.patch"
Content-Transfer-Encoding: base64

RnJvbSBhNTJmY2VmOTAzODJjNTFkOTc2NjZhZTk4OTBjY2UxYTQ5ODllYTZlIE1vbiBTZXAg
MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/UD1DMz1BMWRyYWlnPTIwQnJhZHk/
PSA8UEBkcmFpZ0JyYWR5LmNvbT4KRGF0ZTogRnJpLCAxMiBKdW4gMjAyNiAxMzowNzoyNSAr
MDEwMApTdWJqZWN0OiBbUEFUQ0hdIHRlc3RzOiBwcjogYWRkIGNoZWNrcyBmb3IgKy4uLiBw
YXJhbWV0ZXIgaGFuZGxpbmcKCiogdGVzdHMvcHIvb3B0aW9ucy5zaDogQWQgYSBuZXcgdGVz
dC4KKiB0ZXN0cy9sb2NhbC5tazogUmVmZXJlbmNlIG5ldyB0ZXN0LgpBZGRyZXNzZXMgaHR0
cHM6Ly9idWdzLmdudS5vcmcvODEyMjUKLS0tCiB0ZXN0cy9sb2NhbC5tayAgICAgIHwgIDEg
KwogdGVzdHMvcHIvb3B0aW9ucy5zaCB8IDQwICsrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgNDEgaW5zZXJ0aW9ucygrKQogY3Jl
YXRlIG1vZGUgMTAwNzU1IHRlc3RzL3ByL29wdGlvbnMuc2gKCmRpZmYgLS1naXQgYS90ZXN0
cy9sb2NhbC5tayBiL3Rlc3RzL2xvY2FsLm1rCmluZGV4IDYzYTQzNzMxOC4uNmQ1NzJlNjc5
IDEwMDY0NAotLS0gYS90ZXN0cy9sb2NhbC5taworKysgYi90ZXN0cy9sb2NhbC5tawpAQCAt
MjkwLDYgKzI5MCw3IEBAIGFsbF90ZXN0cyA9CQkJCQlcCiAgIHRlc3RzL21rdGVtcC93cml0
ZS1lcnJvci5zaAkJCVwKICAgdGVzdHMvbWlzYy9hcmNoLnNoCQkJCVwKICAgdGVzdHMvcHIv
Ym91bmRlZC1tZW1vcnkuc2gJCQlcCisgIHRlc3RzL3ByL29wdGlvbnMuc2gJCQkJXAogICB0
ZXN0cy9wci9wci10ZXN0cy5wbAkJCQlcCiAgIHRlc3RzL3B3ZC9hcmd1bWVudC5zaAkJCQlc
CiAgIHRlc3RzL3B3ZC9wd2Qtb3B0aW9uLnNoCQkJXApkaWZmIC0tZ2l0IGEvdGVzdHMvcHIv
b3B0aW9ucy5zaCBiL3Rlc3RzL3ByL29wdGlvbnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggMDAwMDAwMDAwLi5iYmQxZThkNzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9w
ci9vcHRpb25zLnNoCkBAIC0wLDAgKzEsNDAgQEAKKyMhL2Jpbi9zaAorIyBUZXN0ICdwcicg
b3B0aW9uIGhhbmRsaW5nCisKKyMgQ29weXJpZ2h0IChDKSAyMDI2IEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2Yg
dGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBh
bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUu
b3JnL2xpY2Vuc2VzLz4uCisKKy4gIiR7c3JjZGlyPS59L3Rlc3RzL2luaXQuc2giOyBwYXRo
X3ByZXBlbmRfIC4vc3JjCitwcmludF92ZXJfIHByCitnZXRsaW1pdHNfCisKKyMgRW5zdXJl
IHByIHRyZWF0cyBhbGwgaW52YWxpZCArcGFnZSByYW5nZXMgYXMgYSBmaWxlCitmb3IgcCBp
biArMCArMGZvbzsgZG8KKyAgcmV0dXJuc18gMSBwciAiJHAiIDI+ZXJyIDwvZGV2L251bGwK
KyAgcHJpbnRmICclc1xuJyAicHI6ICRwOiAkRU5PRU5UIiA+ZXhwIHx8IGZyYW1ld29ya19m
YWlsdXJlXworICBjb21wYXJlIGV4cCBlcnIgfHwgZmFpbD0xCitkb25lCisKKyMgbnVtYmVy
IHBhcnNpbmcgaXNzdWUKK3JldHVybnNfIDEgcHIgLS1wYWdlcz0tMCAyPmVyciA8L2Rldi9u
dWxsCitwcmludGYgJyVzXG4nICJwcjogaW52YWxpZCAtLXBhZ2VzIGFyZ3VtZW50ICctMCci
ID5leHAKK2NvbXBhcmUgZXhwIGVyciB8fCBmYWlsPTEKKworIyBudW1iZXIgdmFsaWRhdGlv
biBpc3N1ZQorcmV0dXJuc18gMSBwciAtLXBhZ2VzPTAgMj5lcnIgPC9kZXYvbnVsbAorcHJp
bnRmICclc1xuJyAicHI6IGludmFsaWQgcGFnZSByYW5nZSAnMCciID5leHAKK2NvbXBhcmUg
ZXhwIGVyciB8fCBmYWlsPTEKKworRXhpdCAkZmFpbAotLSAKMi41NC4wCgo=

--------------wOXj1yex0TO6wwNWyF16gT9J--