Open cocco84 opened 3 months ago
@cocco84
VARIANT変換の実装漏れです
VARIANT型の変数はprintや代入など、その値にアクセスする際に該当するUWSCRデータ型に変換を行うのですが、バイナリに対しての変換処理がそもそも実装されていなかったため不正なVARIANT型
と判定されています
.responseBody
は VAR_ARRAY or VAR_BYTE
VARIANTのバイト配列がUWSCR型に変換されるとVARIANTの配列になっている
しかしそのvtが異常で、example.com
のresponseBodyの冒頭は以下のようになっている
print .responseBody
// [VARIANT(60), VARIANT(33), VARIANT(100), VARIANT(111), ...]
どうやらこれはバイト値がそのままvtとなっているためで、取りうる値によっては不正なVARIANT型
エラーとなるものと考えられる
変換処理は要調査
タイトル変更しました
vtがVT_ARRAY
であるためVARIANT::Anonymous::Anonymous::Anonymous::parray
からSAFEARRAY
のポインタを得て、その中のVARIANT
をそれぞれObject
に変換する処理を行っているが、SAFEARRAY
から取り出したVARIANT
がすでに壊れている?のでどうにもならない
SafeArrayGetElement
によるコピーもSafeArrayAccessData
での直アクセスでもうまくいかない
原因が不明なのでwindows-rsのアップデートで解消されることに期待し、ひとまず調査は打ち切り
windows-rsのアップデート ただし、現行バージョンは破壊的変更を伴うのですぐにはできない v2対応になるかも
stream = createoleobj("ADODB.Stream")
stream.open()
stream.type = 2
stream.writetext("abc")
stream.position = 0
stream.type = 1
bytes = stream.read(stream.size)
stream.close()
expected = [255,254,97,0,98,0,99,0,]
print 'returned: ' + bytes
print 'expected: ' + expected
print 'result : ' + (bytes == expected)
概要
5行目: binary = .responseBody [VARIANT変換エラー] 不正なVARIANT型(13) が出ます
正確に言えばprint もできなかったので代入に限らず取り扱いそのものの問題でしょうか? responseTextは問題ありませんでした
再現スクリプト
再現手順
No response
回避方法
No response
備考
No response
バージョン
1.0.2
不具合発生環境
No response