summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2025-05-16 07:45:10 -0700
committerKaz Kylheku <kaz@kylheku.com>2025-05-16 07:45:10 -0700
commit410116deffa838061b8380f4d794a1b0ed12dbee (patch)
treed76752f9acd931415f5762798ae23883976c66ec
parent840383dbaac4f8ad9e9ea4b0b7156e65569821d3 (diff)
downloadtxr-410116deffa838061b8380f4d794a1b0ed12dbee.tar.gz
txr-410116deffa838061b8380f4d794a1b0ed12dbee.tar.bz2
txr-410116deffa838061b8380f4d794a1b0ed12dbee.zip
buf: bug: empty fill pattern.
* buf.c (prepare_pattern): Do not return a zero length pattern for an empty buffer. Callers don't deal with this properly. Return a one byte pattern that is zero. * test/012/buf.tl: Test case added. * txr.1: Documented.
-rw-r--r--buf.c11
-rw-r--r--tests/012/buf.tl2
-rw-r--r--txr.14
3 files changed, 15 insertions, 2 deletions
diff --git a/buf.c b/buf.c
index 4a35bc8b..3f7b7738 100644
--- a/buf.c
+++ b/buf.c
@@ -133,8 +133,15 @@ static void prepare_pattern(mem_t **ppat, mem_t **pfree, mem_t pbuf[SIZEOF_PTR],
case BUF:
{
struct buf *pb = buf_handle(pat, self);
- *ppat = pb->data;
- *plen = c_unum(pb->len, self);
+ ucnum l = c_unum(pb->len, self);
+
+ if (l > 0) {
+ *ppat = pb->data;
+ *plen = l;
+ } else {
+ *ppat = pbuf;
+ *plen = 1;
+ }
}
break;
default:
diff --git a/tests/012/buf.tl b/tests/012/buf.tl
index 082e0d9f..22640eac 100644
--- a/tests/012/buf.tl
+++ b/tests/012/buf.tl
@@ -611,3 +611,5 @@
(buf-set-length b 3 #xdeadbeef) 2 b #b'ffefef'
(buf-set-length b 4 #x-deadbeef) 3 b #b'ffefefef'
(buf-set-length b 7 #x-deadbeef) 4 b #b'ffefefefdeadbe'))
+
+(test (make-buf 16 #b'') #b'00000000000000000000000000000000')
diff --git a/txr.1 b/txr.1
index 10d77642..daa390c2 100644
--- a/txr.1
+++ b/txr.1
@@ -29015,6 +29015,10 @@ which doesn't fit into the buffer length is truncated
on the opposite side of the alignment mode: truncated
on the left under right alignment and vice versa.
+An empty buffer
+.meta pat
+specifies one byte pattern of zero.
+
.coNP Function @ make-buf
.synb
.mets (make-buf < len >> [ init-pat <> [ alloc-size ]])