From 9887669ab0c797f0fa5c133c5901679908ceb1ea Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 4 Oct 2016 10:09:48 -0600 Subject: [PATCH] fix single-argument `write-byte` and `write-char` Repairs a mistake in 8e7792d8 Closes PR 15363 --- pkgs/racket-test-core/tests/racket/file.rktl | 14 ++++++++++++++ racket/src/racket/src/portfun.c | 2 ++ 2 files changed, 16 insertions(+) diff --git a/pkgs/racket-test-core/tests/racket/file.rktl b/pkgs/racket-test-core/tests/racket/file.rktl index c9f7ca6c70..f65203d79a 100644 --- a/pkgs/racket-test-core/tests/racket/file.rktl +++ b/pkgs/racket-test-core/tests/racket/file.rktl @@ -1849,6 +1849,20 @@ resolve-path "C://testing-root////testing-dir\\\\testing-file")])) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Make sure `write-byte` and `write-char` don't try to test +;; a non-supplied argument: + +(parameterize ([current-output-port (open-output-string)]) + (let ([s (if (zero? (random 1)) "a" "b")]) + (string-append s s) ; causes a clear operation on the runstack for second argument + (write-byte 65))) + +(parameterize ([current-output-port (open-output-string)]) + (let ([s (if (zero? (random 1)) "a" "b")]) + (string-append s s) ; causes a clear operation on the runstack for second argument + (write-char #\A))) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs) diff --git a/racket/src/racket/src/portfun.c b/racket/src/racket/src/portfun.c index 86d9ef9568..cadf4ee4cd 100644 --- a/racket/src/racket/src/portfun.c +++ b/racket/src/racket/src/portfun.c @@ -4171,6 +4171,7 @@ write_byte (int argc, GC_CAN_IGNORE Scheme_Object *argv[]) XFORM_ASSERT_NO_CONVE if (SCHEME_INTP(argv[0]) && (SCHEME_INT_VAL(argv[0]) >= 0) && (SCHEME_INT_VAL(argv[0]) <= 255) + && (argc > 1) && SCHEME_OUTPUT_PORTP(argv[1])) { char buffer[1]; buffer[0] = SCHEME_INT_VAL(argv[0]); @@ -4215,6 +4216,7 @@ write_char (int argc, GC_CAN_IGNORE Scheme_Object *argv[]) XFORM_ASSERT_NO_CONVE if (argc && SCHEME_CHARP(argv[0]) && (SCHEME_CHAR_VAL(argv[0]) < 128) + && (argc > 1) && SCHEME_OUTPUT_PORTP(argv[1])) { char buffer[1]; buffer[0] = SCHEME_CHAR_VAL(argv[0]);