From 6b76ac3d18764415eb7c7646b9cc32c1c2b1a782 Mon Sep 17 00:00:00 2001 From: Calvin Rose Date: Sun, 10 Nov 2019 14:50:21 -0600 Subject: [PATCH] Fix bug when appending buffer to self. janet_to_string_b had a bug when printing buffers. --- CHANGELOG.md | 3 +++ src/core/pp.c | 10 ++++++---- test/suite7.janet | 7 +++++++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b6afd67..97cf0fa5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ # Changelog All notable changes to this project will be documented in this file. +### Unreleased +- Fix bug when printing buffer to self in some cases. + ## 1.5.0 - 2019-11-10 - `os/date` now defaults to UTC. - Add `--test` flag to jpm to test libraries on installation. diff --git a/src/core/pp.c b/src/core/pp.c index 9a8e27b0..2e39a04f 100644 --- a/src/core/pp.c +++ b/src/core/pp.c @@ -253,11 +253,13 @@ void janet_to_string_b(JanetBuffer *buffer, Janet x) { default: janet_description_b(buffer, x); break; - case JANET_BUFFER: - janet_buffer_push_bytes(buffer, - janet_unwrap_buffer(x)->data, - janet_unwrap_buffer(x)->count); + case JANET_BUFFER: { + JanetBuffer *to = janet_unwrap_buffer(x); + /* Prevent resizing buffer while appending */ + if (buffer == to) janet_buffer_extra(buffer, to->count); + janet_buffer_push_bytes(buffer, to->data, to->count); break; + } case JANET_STRING: case JANET_SYMBOL: case JANET_KEYWORD: diff --git a/test/suite7.janet b/test/suite7.janet index ebb24c0a..500d8d91 100644 --- a/test/suite7.janet +++ b/test/suite7.janet @@ -221,4 +221,11 @@ :week-day 3} (os/date 1388608200)) "os/date") +# Appending buffer to self + +(with-dyns [:out @""] + (prin "abcd") + (prin (dyn :out)) + (assert (deep= (dyn :out) @"abcdabcd") "print buffer to self")) + (end-suite)