Created
May 30, 2011 06:37
-
-
Save miyamuko/998522 to your computer and use it in GitHub Desktop.
si:make-chunk の src-chunk が nil で offset を指定した場合、chunk をいじろうとした時点で #xyzzy がクラッシュする
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; 以下のコードで si:unpack-string の時点で xyzzy がクラッシュする。 | |
;; | |
;; - offset を指定しない場合や nil の場合はクラッシュしない | |
;; - offset の値は何でもいい | |
;; | |
;; offset を指定された場合に chunk が nil の場合は、si:make-chunk の時点でエラーにするように | |
;; 引数をチェックするとかかな。 | |
(let ((chunk nil) | |
(offset 100)) | |
(si:unpack-string | |
(si:make-chunk nil 256 chunk offset) | |
0 256)) |
あ、そうか。リファレンスを読み直したらたしかにそういう仕様でしたね。
SRC-CHUNK が nil で OFFSET が指定されていた場合には、 OFFSET をアドレス
と見なすのが特殊です。
cairo でこの機能を使っていたのにすっかり忘れてました。
今回は chunk が nil になることを期待してないコードに、うっかり nil を渡してしまって
クラッシュし、原因がなかなか分からずにハマってました。
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
SOURCEがnilでOFFSETが数値の場合、si:make-chunkはOFFSETをアドレスとみなして参照するのでこういう使い方ではないでしょうか。100という参照してはいけないアドレスを参照してクラッシュしているのだと思います。クラッシュせずに例外をあげてくれるといいとは思います。