diff --git a/LOG b/LOG index 756badf8f3..15a3ee5724 100644 --- a/LOG +++ b/LOG @@ -450,3 +450,6 @@ Also add a simplification for for-each with empty lists with optimization level 2. cp0.ss, 4.ms, primdata.ss +- fix invalid memory reference when enum-set-indexer procedure is not + passed a symbol + enum.ss, enum.ms, root-experr*, release_notes.stex diff --git a/mats/enum.ms b/mats/enum.ms index 3ed6494430..a3741eebd6 100644 --- a/mats/enum.ms +++ b/mats/enum.ms @@ -101,6 +101,8 @@ (error? (make-enumeration 3)) (error? (enum-set-universe 3)) (error? (enum-set-indexer 3)) + (error? (let ([e (make-enumeration '(a b c))]) + ((enum-set-indexer e) 1))) (error? (enum-set->list 3)) (equal? '(a b) (let () diff --git a/mats/root-experr-compile-0-f-f-f b/mats/root-experr-compile-0-f-f-f index a0288f80a6..17fd63b457 100644 --- a/mats/root-experr-compile-0-f-f-f +++ b/mats/root-experr-compile-0-f-f-f @@ -7625,19 +7625,20 @@ hash.mo:Expected error in mat hash-functions: "string-ci-hash: hello is not a st hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #". hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #". enum.mo:Expected error in mat enumeration: "enum-set-intersection: # and # have different enumeration types". -enum.mo:Expected error in mat enumeration: "enum-set-intersection: 1 isn't an enumeration". +enum.mo:Expected error in mat enumeration: "enum-set-intersection: 1 is not an enumeration". enum.mo:Expected error in mat enumeration: "universe of foo does not include specified symbol d". enum.mo:Expected error in mat enumeration: "universe of foo does not include specified symbol d". enum.mo:Expected error in mat enumeration: "make-enumeration: 3 is not a list of symbols". -enum.mo:Expected error in mat enumeration: "enum-set-universe: 3 isn't an enumeration". -enum.mo:Expected error in mat enumeration: "enum-set-indexer: 3 isn't an enumeration". -enum.mo:Expected error in mat enumeration: "enum-set->list: 3 isn't an enumeration". -enum.mo:Expected error in mat enumeration: "enum-set-union: 3 isn't an enumeration". -enum.mo:Expected error in mat enumeration: "enum-set-union: 4 isn't an enumeration". +enum.mo:Expected error in mat enumeration: "enum-set-universe: 3 is not an enumeration". +enum.mo:Expected error in mat enumeration: "enum-set-indexer: 3 is not an enumeration". +enum.mo:Expected error in mat enumeration: "enum-set-indexer: 1 is not a symbol". +enum.mo:Expected error in mat enumeration: "enum-set->list: 3 is not an enumeration". +enum.mo:Expected error in mat enumeration: "enum-set-union: 3 is not an enumeration". +enum.mo:Expected error in mat enumeration: "enum-set-union: 4 is not an enumeration". enum.mo:Expected error in mat enumeration: "enum-set-union: # and # have different enumeration types". -enum.mo:Expected error in mat enumeration: "enum-set-complement: 3 isn't an enumeration". -enum.mo:Expected error in mat enumeration: "enum-set-projection: 3 isn't an enumeration". -enum.mo:Expected error in mat enumeration: "enum-set-projection: 4 isn't an enumeration". +enum.mo:Expected error in mat enumeration: "enum-set-complement: 3 is not an enumeration". +enum.mo:Expected error in mat enumeration: "enum-set-projection: 3 is not an enumeration". +enum.mo:Expected error in mat enumeration: "enum-set-projection: 4 is not an enumeration". enum.mo:Expected error in mat enumeration: "invalid syntax (define-enumeration 3 () bar)". enum.mo:Expected error in mat enumeration: "invalid syntax (define-enumeration foo baz bar)". enum.mo:Expected error in mat enumeration: "invalid syntax (define-enumeration foo () 3)". diff --git a/mats/root-experr-compile-2-f-f-f b/mats/root-experr-compile-2-f-f-f index a0288f80a6..17fd63b457 100644 --- a/mats/root-experr-compile-2-f-f-f +++ b/mats/root-experr-compile-2-f-f-f @@ -7625,19 +7625,20 @@ hash.mo:Expected error in mat hash-functions: "string-ci-hash: hello is not a st hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #". hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #". enum.mo:Expected error in mat enumeration: "enum-set-intersection: # and # have different enumeration types". -enum.mo:Expected error in mat enumeration: "enum-set-intersection: 1 isn't an enumeration". +enum.mo:Expected error in mat enumeration: "enum-set-intersection: 1 is not an enumeration". enum.mo:Expected error in mat enumeration: "universe of foo does not include specified symbol d". enum.mo:Expected error in mat enumeration: "universe of foo does not include specified symbol d". enum.mo:Expected error in mat enumeration: "make-enumeration: 3 is not a list of symbols". -enum.mo:Expected error in mat enumeration: "enum-set-universe: 3 isn't an enumeration". -enum.mo:Expected error in mat enumeration: "enum-set-indexer: 3 isn't an enumeration". -enum.mo:Expected error in mat enumeration: "enum-set->list: 3 isn't an enumeration". -enum.mo:Expected error in mat enumeration: "enum-set-union: 3 isn't an enumeration". -enum.mo:Expected error in mat enumeration: "enum-set-union: 4 isn't an enumeration". +enum.mo:Expected error in mat enumeration: "enum-set-universe: 3 is not an enumeration". +enum.mo:Expected error in mat enumeration: "enum-set-indexer: 3 is not an enumeration". +enum.mo:Expected error in mat enumeration: "enum-set-indexer: 1 is not a symbol". +enum.mo:Expected error in mat enumeration: "enum-set->list: 3 is not an enumeration". +enum.mo:Expected error in mat enumeration: "enum-set-union: 3 is not an enumeration". +enum.mo:Expected error in mat enumeration: "enum-set-union: 4 is not an enumeration". enum.mo:Expected error in mat enumeration: "enum-set-union: # and # have different enumeration types". -enum.mo:Expected error in mat enumeration: "enum-set-complement: 3 isn't an enumeration". -enum.mo:Expected error in mat enumeration: "enum-set-projection: 3 isn't an enumeration". -enum.mo:Expected error in mat enumeration: "enum-set-projection: 4 isn't an enumeration". +enum.mo:Expected error in mat enumeration: "enum-set-complement: 3 is not an enumeration". +enum.mo:Expected error in mat enumeration: "enum-set-projection: 3 is not an enumeration". +enum.mo:Expected error in mat enumeration: "enum-set-projection: 4 is not an enumeration". enum.mo:Expected error in mat enumeration: "invalid syntax (define-enumeration 3 () bar)". enum.mo:Expected error in mat enumeration: "invalid syntax (define-enumeration foo baz bar)". enum.mo:Expected error in mat enumeration: "invalid syntax (define-enumeration foo () 3)". diff --git a/release_notes/release_notes.stex b/release_notes/release_notes.stex index 960a6993a6..685643d6b7 100644 --- a/release_notes/release_notes.stex +++ b/release_notes/release_notes.stex @@ -1490,6 +1490,12 @@ in fasl files does not generally make sense. %----------------------------------------------------------------------------- \section{Bug Fixes}\label{section:bugfixes} +\subsection{Invalid memory reference when \protect\scheme{enum-set-indexer} procedure is not passed a symbol} + +A bug that caused the procedure returned by \scheme{enum-set-indexer} +to perform an invalid memory reference when passed an argument that is +not a symbol has been fixed. + \subsection{Storage for inaccessible mutexes and conditions is reclaimed (9.4.1)} The C heap storage for inaccessible mutexes and conditions is now reclaimed. diff --git a/s/enum.ss b/s/enum.ss index 873517b440..faa76c48ff 100644 --- a/s/enum.ss +++ b/s/enum.ss @@ -116,7 +116,7 @@ an-enum-set: (let ([rtd (record-rtd enum-set)]) (and (eq? (record-rtd rtd) enum-base-rtd) rtd))) - ($oops who "~s isn't an enumeration" enum-set))) + ($oops who "~s is not an enumeration" enum-set))) (define (assert-symbol-list who symbol-list) (unless (and (list? symbol-list) @@ -210,7 +210,9 @@ an-enum-set: (set! enum-set-indexer (lambda (enum-set) (let ([sym->index (get-sym->index (enum-set-rtd 'enum-set-indexer enum-set))]) - (lambda (x) (symbol-hashtable-ref sym->index x #f))))) + (lambda (x) + (assert-symbol 'enum-set-indexer x) + (symbol-hashtable-ref sym->index x #f))))) (set! enum-set-constructor (lambda (enum-set)