comparison tests/automated/lisp-tests.el @ 5892:053ef01b71a8

Import the #'clear-string API from GNU, use it in tls.c src/ChangeLog addition: 2015-04-18 Aidan Kehoe <kehoea@parhasard.net> * sequence.c (Fclear_string): New, API from GNU. Zero a string's contents, making sure the text is not kept around even when the string's data is reallocated because of a changed character length. * sequence.c (syms_of_sequence): Make it available to Lisp. * lisp.h: Make it available to C code. * tls.c (nss_pk11_password): Use it. * tls.c (gnutls_pk11_password): Use it. * tls.c (openssl_password): Use it. tests/ChangeLog addition: 2015-04-18 Aidan Kehoe <kehoea@parhasard.net> * automated/lisp-tests.el: Test #'clear-string, just added. Unfortunately there's no way to be certain from Lisp that the old password data has been erased after realloc; it may be worth adding a test to tests.c, but *we'll be reading memory we shouldn't be*, so that gives me pause.
author Aidan Kehoe <kehoea@parhasard.net>
date Sat, 18 Apr 2015 23:00:14 +0100
parents bd644055ef44
children d3d073aceaea
comparison
equal deleted inserted replaced
5890:8704b7957585 5892:053ef01b71a8
3794 (Assert (eql ?\x0a (digit-char 10 16 binary-table)) 3794 (Assert (eql ?\x0a (digit-char 10 16 binary-table))
3795 "checking `digit-char' reflects RADIX-TABLE, 10, base 16") 3795 "checking `digit-char' reflects RADIX-TABLE, 10, base 16")
3796 (Assert (eql ?\x09 (digit-char 9 nil binary-table)) 3796 (Assert (eql ?\x09 (digit-char 9 nil binary-table))
3797 "checking `digit-char' reflects RADIX-TABLE, 9, base 10")) 3797 "checking `digit-char' reflects RADIX-TABLE, 9, base 10"))
3798 3798
3799 ;; Test #'clear-string.
3800
3801 (Check-Error wrong-type-argument (clear-string [?\x00 ?\xff]))
3802 (Check-Error wrong-type-argument (clear-string '(?\x00 ?\xff)))
3803 (Check-Error wrong-type-argument (clear-string #*1010))
3804 (Check-Error wrong-number-of-arguments (clear-string "hello" ?*))
3805
3806 (let* ((template (concat
3807 "this is a template string, "
3808 (if (unicode-to-char #x06af)
3809 (decode-coding-string
3810 (concat
3811 "\xd8\xa8\xd9\x87 \xd9\x86\xd8\xb8\xd8\xb1 "
3812 "\xd9\x85\xd9\x86 \xd8\xae\xd9\x88\xda\xa9 "
3813 "\xd8\xae\xd9\x88\xd8\xb4\xd9\x85\xd8\xb2\xd9\x87 "
3814 "\xd8\xa7\xd8\xb3\xd8\xaa")
3815 'utf-8))))
3816 (length (length template))
3817 (null (make-string length ?\x00)))
3818 (Assert (null (clear-string (copy-sequence template))))
3819 (Assert (eql length (let ((string (copy-sequence template)))
3820 (clear-string string)
3821 (length string))))
3822 (Assert (equal null (let ((string (copy-sequence template)))
3823 (clear-string string)
3824 string))))
3825
3826 ;; No way to check from Lisp whether the data was actually nulled.
3827
3799 ;; Check that a bug in #'check-type with non-setfable PLACE (something not 3828 ;; Check that a bug in #'check-type with non-setfable PLACE (something not
3800 ;; actually specified by Common Lisp) has been fixed. 3829 ;; actually specified by Common Lisp) has been fixed.
3801 (Assert (prog1 t (check-type 300 fixnum)) 3830 (Assert (prog1 t (check-type 300 fixnum))
3802 "checking #'check-type OK, fixnum literal PLACE") 3831 "checking #'check-type OK, fixnum literal PLACE")
3803 (Check-Error wrong-type-argument 3832 (Check-Error wrong-type-argument