xapian-core and Windows non-ASCII paths
Jean-Francois Dockes <[email protected]> Thu, 4 Jun 2020 12:49:58 +0200
| Newsgroups | gmane.comp.search.xapian.devel |
|---|---|
| Message-ID | <[email protected]> |
--wiuE8H9iPb Content-Type: text/plain; charset=us-ascii Content-Description: message body text Content-Transfer-Encoding: 7bit Hi, I am attaching a patch against the xapian-core 1.4 branch. On Windows with MSVC (probably mingw too but I did not test), it allows xapian-core to create and use an index located at a path containing arbitrary Unicode characters. As far as I could see, this does not work with the current code, and, from the question I asked on xapian-discuss nobody seems to have an obvious external solution for the issue. The idea of the patch is that a conversion to a Windows Unicode wide char string is attempted prior to performing a relevant system call. If the conversion succeeds, the wide version of the call is used, else, the previous narrow call is used. This should ensure that existing applications are undisturbed, and provides a way to tunnel a Unicode path by using utf-8. I am not claiming that the patch should be merged as is. An obvious defect is that you may want to test for an ASCII path (in which case the conversion succeeds but is wasteful). Also, location of the conversion routine, style, etc. may not be appropriate. And there are probably changes missing in untested parts, e.g. xapian-compact. However it shows the appropriate system call changes and fixes the issue for me, so I guess it maybe useful for somebody else. Cheers, jf --wiuE8H9iPb Content-Type: application/octet-stream; name="xapian-1.4-wchar.diff" Content-Disposition: attachment; filename="xapian-1.4-wchar.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3hhcGlhbi1jb3JlL2JhY2tlbmRzL2RiZmFjdG9yeS5jYyBiL3hhcGlhbi1j b3JlL2JhY2tlbmRzL2RiZmFjdG9yeS5jYwppbmRleCAxNGE1MzlmNTY2ODUuLmQyMDJjMzUwOGI0 OCAxMDA2NDQKLS0tIGEveGFwaWFuLWNvcmUvYmFja2VuZHMvZGJmYWN0b3J5LmNjCisrKyBiL3hh cGlhbi1jb3JlL2JhY2tlbmRzL2RiZmFjdG9yeS5jYwpAQCAtMTg2LDEwICsxODYsMjUgQEAgRGF0 YWJhc2U6OkRhdGFiYXNlKGNvbnN0IHN0cmluZyAmcGF0aCwgaW50IGZsYWdzKQogICAgIH0KIAog ICAgIHN0cnVjdCBzdGF0IHN0YXRidWY7CisjaWZkZWYgX19XSU4zMl9fCisgICAgc3RkOjp3c3Ry aW5nIHdwYXRoID0geHV0Zjh0b3djaGFyKHBhdGgpOworICAgIGlmICh3cGF0aC5lbXB0eSgpKSB7 CisgICAgICAgIGlmIChzdGF0KHBhdGguY19zdHIoKSwgJnN0YXRidWYpID09IC0xKSB7CisgICAg ICAgICAgICB0aHJvdyBEYXRhYmFzZU9wZW5pbmdFcnJvcigiQ291bGRuJ3Qgc3RhdCAnIiArIHBh dGggKyAiJyIsIGVycm5vKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHN0cnVj dCBfc3RhdDY0aTMyIHN0OworICAgICAgICBpZiAoX3dzdGF0KHdwYXRoLmNfc3RyKCksICZzdCkg PT0gLTEpIHsKKyAgICAgICAgICAgIHRocm93IERhdGFiYXNlT3BlbmluZ0Vycm9yKCJDb3VsZG4n dCBzdGF0ICciICsgcGF0aCArICInIiwgZXJybm8pOworICAgICAgICB9CisgICAgICAgIHN0YXRi dWYuc3RfbW9kZSA9IHN0LnN0X21vZGU7CisgICAgICAgIHN0YXRidWYuc3Rfc2l6ZSA9IHN0LnN0 X3NpemU7CisgICAgfQorI2Vsc2UKICAgICBpZiAoc3RhdChwYXRoLmNfc3RyKCksICZzdGF0YnVm KSA9PSAtMSkgewogCXRocm93IERhdGFiYXNlT3BlbmluZ0Vycm9yKCJDb3VsZG4ndCBzdGF0ICci ICsgcGF0aCArICInIiwgZXJybm8pOwogICAgIH0KLQorI2VuZGlmCiAgICAgaWYgKFNfSVNSRUco c3RhdGJ1Zi5zdF9tb2RlKSkgewogCS8vIENvdWxkIGJlIGEgc3R1YiBkYXRhYmFzZSBmaWxlLCBv ciBhIHNpbmdsZSBmaWxlIGdsYXNzIGRhdGFiYXNlLgogCkBAIC0yOTAsNyArMzA1LDIyIEBAIFdy aXRhYmxlRGF0YWJhc2U6OldyaXRhYmxlRGF0YWJhc2UoY29uc3Qgc3RkOjpzdHJpbmcgJnBhdGgs IGludCBmbGFncywgaW50IGJsb2NrCiAgICAgZmxhZ3MgJj0gfkRCX0JBQ0tFTkRfTUFTS187CiAg ICAgaWYgKHR5cGUgPT0gMCkgewogCXN0cnVjdCBzdGF0IHN0YXRidWY7Ci0JaWYgKHN0YXQocGF0 aC5jX3N0cigpLCAmc3RhdGJ1ZikgPT0gLTEpIHsKKyAgICAgICAgaW50IHJldDsKKyNpZmRlZiBf X1dJTjMyX18KKyAgICAgICAgc3RkOjp3c3RyaW5nIHdwYXRoID0geHV0Zjh0b3djaGFyKHBhdGgp OworICAgICAgICBpZiAod3BhdGguZW1wdHkoKSkgeworICAgICAgICAgICAgcmV0ID0gc3RhdChw YXRoLmNfc3RyKCksICZzdGF0YnVmKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0 cnVjdCBfc3RhdDY0aTMyIHN0OworICAgICAgICAgICAgaWYgKChyZXQgPSBfd3N0YXQod3BhdGgu Y19zdHIoKSwgJnN0KSkgPT0gMCkgeworICAgICAgICAgICAgICAgIHN0YXRidWYuc3RfbW9kZSA9 IHN0LnN0X21vZGU7CisgICAgICAgICAgICAgICAgc3RhdGJ1Zi5zdF9zaXplID0gc3Quc3Rfc2l6 ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgcmV0ID0gc3RhdChw YXRoLmNfc3RyKCksICZzdGF0YnVmKTsKKyNlbmRpZgorCWlmIChyZXQgPT0gLTEpIHsKIAkgICAg Ly8gRU5PRU5UIHByb2JhYmx5IGp1c3QgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUg ZGlyZWN0b3J5LgogCSAgICBpZiAoZXJybm8gIT0gRU5PRU5UKQogCQl0aHJvdyBEYXRhYmFzZU9w ZW5pbmdFcnJvcigiQ291bGRuJ3Qgc3RhdCAnIiArIHBhdGggKyAiJyIsIGVycm5vKTsKZGlmZiAt LWdpdCBhL3hhcGlhbi1jb3JlL2JhY2tlbmRzL2ZsaW50X2xvY2suY2MgYi94YXBpYW4tY29yZS9i YWNrZW5kcy9mbGludF9sb2NrLmNjCmluZGV4IGIzZDk2OTcxOWQ3MS4uMTVlNjVhMGFkMjc3IDEw MDY0NAotLS0gYS94YXBpYW4tY29yZS9iYWNrZW5kcy9mbGludF9sb2NrLmNjCisrKyBiL3hhcGlh bi1jb3JlL2JhY2tlbmRzL2ZsaW50X2xvY2suY2MKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRl IDxjc3RyaW5nPgogI2VuZGlmCiAKKyNpbmNsdWRlICJwb3NpeHlfd3JhcHBlci5oIgogI2luY2x1 ZGUgImNsb3NlZnJvbS5oIgogI2luY2x1ZGUgImVycm5vX3RvX3N0cmluZy5oIgogI2luY2x1ZGUg Im9tYXNzZXJ0LmgiCkBAIC0xMjgsNiArMTI5LDcgQEAgRmxpbnRMb2NrOjpsb2NrKGJvb2wgZXhj bHVzaXZlLCBib29sIHdhaXQsIHN0cmluZyAmIGV4cGxhbmF0aW9uKSB7CiAgICAgQXNzZXJ0KGV4 Y2x1c2l2ZSk7CiAjaWYgZGVmaW5lZCBfX0NZR1dJTl9fIHx8IGRlZmluZWQgX19XSU4zMl9fCiAg ICAgQXNzZXJ0KGhGaWxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKTsKKyAgICBzdGQ6OndzdHJp bmcgd3BhdGg7CiAjaWZkZWYgX19DWUdXSU5fXwogICAgIGNoYXIgZm5tW01BWF9QQVRIXTsKICNp ZiBDWUdXSU5fVkVSU0lPTl9BUElfTUFKT1IgPT0gMCAmJiBDWUdXSU5fVkVSU0lPTl9BUElfTUlO T1IgPCAxODEKQEAgLTE0MiwxMyArMTQ0LDE5IEBAIEZsaW50TG9jazo6bG9jayhib29sIGV4Y2x1 c2l2ZSwgYm9vbCB3YWl0LCBzdHJpbmcgJiBleHBsYW5hdGlvbikgewogI2VuZGlmCiAjZWxzZQog ICAgIGNvbnN0IGNoYXIgKmZubSA9IGZpbGVuYW1lLmNfc3RyKCk7CisgICAgd3BhdGggPSB4dXRm OHRvd2NoYXIoZmlsZW5hbWUpOwogI2VuZGlmCiByZXRyeToKICAgICAvLyBGSVhNRTogVXNlIExv Y2tGaWxlRXgoKSBmb3IgbG9ja2luZywgd2hpY2ggd291bGQgYWxsb3cgcHJvcGVyIGJsb2NraW5n CiAgICAgLy8gYW5kIGFsc28gYnl0ZS1yYW5nZSBsb2NraW5nIGZvciB3aGVuIHdlIGltcGxlbWVu dCBNVkNDLiAgQnV0IGlzIHRoZXJlIGEKICAgICAvLyB3YXkgdG8gaW50ZXJ3b3JrIHdpdGggdGhl IENyZWF0ZUZpbGUoKS1iYXNlZCBsb2NraW5nIHdoaWxlIGRvaW5nIHNvPwotICAgIGhGaWxlID0g Q3JlYXRlRmlsZShmbm0sIEdFTkVSSUNfV1JJVEUsIEZJTEVfU0hBUkVfUkVBRCwKLQkJICAgICAg IE5VTEwsIE9QRU5fQUxXQVlTLCBGSUxFX0FUVFJJQlVURV9OT1JNQUwsIE5VTEwpOworICAgIGlm ICh3cGF0aC5lbXB0eSgpKSB7CisgICAgICAgIGhGaWxlID0gQ3JlYXRlRmlsZUEoZm5tLCBHRU5F UklDX1dSSVRFLCBGSUxFX1NIQVJFX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg TlVMTCwgT1BFTl9BTFdBWVMsIEZJTEVfQVRUUklCVVRFX05PUk1BTCwgTlVMTCk7CisgICAgfSBl bHNlIHsKKyAgICAgICAgaEZpbGUgPSBDcmVhdGVGaWxlVyh3cGF0aC5jX3N0cigpLCBHRU5FUklD X1dSSVRFLCBGSUxFX1NIQVJFX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM TCwgT1BFTl9BTFdBWVMsIEZJTEVfQVRUUklCVVRFX05PUk1BTCwgTlVMTCk7CisgICAgfQogICAg IGlmIChoRmlsZSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgcmV0dXJuIFNVQ0NFU1M7CiAgICAg aWYgKEdldExhc3RFcnJvcigpID09IEVSUk9SX0FMUkVBRFlfRVhJU1RTKSB7CiAJaWYgKHdhaXQp IHsKZGlmZiAtLWdpdCBhL3hhcGlhbi1jb3JlL2JhY2tlbmRzL2dsYXNzL2dsYXNzX2RhdGFiYXNl LmNjIGIveGFwaWFuLWNvcmUvYmFja2VuZHMvZ2xhc3MvZ2xhc3NfZGF0YWJhc2UuY2MKaW5kZXgg ZTMyZDFiMGM4ZjE2Li45YzVmOWQ0ZWQ0MDkgMTAwNjQ0Ci0tLSBhL3hhcGlhbi1jb3JlL2JhY2tl bmRzL2dsYXNzL2dsYXNzX2RhdGFiYXNlLmNjCisrKyBiL3hhcGlhbi1jb3JlL2JhY2tlbmRzL2ds YXNzL2dsYXNzX2RhdGFiYXNlLmNjCkBAIC0xMjgsNyArMTI4LDE4IEBAIEdsYXNzRGF0YWJhc2U6 OkdsYXNzRGF0YWJhc2UoY29uc3Qgc3RyaW5nICZnbGFzc19kaXIsIGludCBmbGFncywKICAgICBp ZiAoYWN0aW9uICE9IFhhcGlhbjo6REJfT1BFTiAmJiAhZGF0YWJhc2VfZXhpc3RzKCkpIHsKIAkv LyBDcmVhdGUgdGhlIGRpcmVjdG9yeSBmb3IgdGhlIGRhdGFiYXNlLCBpZiBpdCBkb2Vzbid0IGV4 aXN0CiAJLy8gYWxyZWFkeS4KLQlpZiAobWtkaXIoZGJfZGlyLmNfc3RyKCksIDA3NTUpIDwgMCkg eworICAgICAgICBpbnQgcmV0OworI2lmZGVmIF9fV0lOMzJfXworICAgICAgICBzdGQ6OndzdHJp bmcgd3BhdGggPSB4dXRmOHRvd2NoYXIoZGJfZGlyKTsKKyAgICAgICAgaWYgKHdwYXRoLmVtcHR5 KCkpIHsKKyAgICAgICAgICAgIHJldCA9IG1rZGlyKGRiX2Rpci5jX3N0cigpLCAwNzU1KTsKKyAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldCA9IF93bWtkaXIod3BhdGguY19zdHIoKSk7 CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIHJldCA9IG1rZGlyKGRiX2Rpci5jX3N0cigpLCAw NzU1KTsKKyNlbmRpZgorCWlmIChyZXQgPCAwKSB7CiAJICAgIGludCBta2Rpcl9lcnJubyA9IGVy cm5vOwogCSAgICBpZiAobWtkaXJfZXJybm8gIT0gRUVYSVNUIHx8ICFkaXJfZXhpc3RzKGRiX2Rp cikpIHsKIAkJdGhyb3cgWGFwaWFuOjpEYXRhYmFzZUNyZWF0ZUVycm9yKGRiX2RpciArICI6IG1r ZGlyIGZhaWxlZCIsCmRpZmYgLS1naXQgYS94YXBpYW4tY29yZS9jb21tb24vZmlsZXRlc3RzLmgg Yi94YXBpYW4tY29yZS9jb21tb24vZmlsZXRlc3RzLmgKaW5kZXggMmYxOWZjNGZkZTJiLi45MTU1 NGUyZmU4ZjggMTAwNjQ0Ci0tLSBhL3hhcGlhbi1jb3JlL2NvbW1vbi9maWxldGVzdHMuaAorKysg Yi94YXBpYW4tY29yZS9jb21tb24vZmlsZXRlc3RzLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNs dWRlICJzYWZlc3lzc3RhdC5oIgogI2luY2x1ZGUgPGNlcnJubz4KICNpbmNsdWRlIDxzdHJpbmc+ CisjaW5jbHVkZSAicG9zaXh5X3dyYXBwZXIuaCIKIAogLyoqIFRlc3QgaWYgYSBmaWxlIGV4aXN0 cy4KICAqCkBAIC0zNyw4ICszOCwxOSBAQAogICoJICAgIHJlc29sdmVzIHRvIGEgcmVndWxhciBm aWxlLgogICovCiBpbmxpbmUgYm9vbCBmaWxlX2V4aXN0cyhjb25zdCBjaGFyICogcGF0aCkgewor I2lmZGVmIF9fV0lOMzJfXworICAgIHN0ZDo6d3N0cmluZyB3cGF0aCA9IHh1dGY4dG93Y2hhcihw YXRoKTsKKyAgICBpZiAod3BhdGguZW1wdHkoKSkgeworICAgICAgICBzdHJ1Y3QgX3N0YXQ2NCBz dDsKKyAgICAgICAgcmV0dXJuIHN0YXQocGF0aCwgJnN0KSA9PSAwICYmIFNfSVNSRUcoc3Quc3Rf bW9kZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RydWN0IF9zdGF0NjRpMzIgc3Q7CisgICAg ICAgIHJldHVybiBfd3N0YXQod3BhdGguY19zdHIoKSwgJnN0KSA9PSAwICYmIFNfSVNSRUcoc3Qu c3RfbW9kZSk7CisgICAgfQorI2Vsc2UKICAgICBzdHJ1Y3Qgc3RhdCBzdDsKICAgICByZXR1cm4g c3RhdChwYXRoLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKTsKKyNlbmRpZgogfQog CiAvKiogVGVzdCBpZiBhIGZpbGUgZXhpc3RzLgpAQCAtMTM0LDggKzE0NiwxOSBAQCBpbmxpbmUg b2ZmX3QgZmlsZV9zaXplKGludCBmZCkgewogICoJICAgIHRvIGEgZGlyZWN0b3J5LgogICovCiBp bmxpbmUgYm9vbCBkaXJfZXhpc3RzKGNvbnN0IGNoYXIgKiBwYXRoKSB7CisjaWZkZWYgX19XSU4z Ml9fCisgICAgc3RkOjp3c3RyaW5nIHdwYXRoID0geHV0Zjh0b3djaGFyKHBhdGgpOworICAgIGlm ICh3cGF0aC5lbXB0eSgpKSB7CisgICAgICAgIHN0cnVjdCBfc3RhdDY0IHN0OworICAgICAgICBy ZXR1cm4gc3RhdChwYXRoLCAmc3QpID09IDAgJiYgU19JU0RJUihzdC5zdF9tb2RlKTsKKyAgICB9 IGVsc2UgeworICAgICAgICBzdHJ1Y3QgX3N0YXQ2NGkzMiBzdDsKKyAgICAgICAgcmV0dXJuIF93 c3RhdCh3cGF0aC5jX3N0cigpLCAmc3QpID09IDAgJiYgU19JU0RJUihzdC5zdF9tb2RlKTsKKyAg ICB9CisjZWxzZQogICAgIHN0cnVjdCBzdGF0IHN0OwogICAgIHJldHVybiBzdGF0KHBhdGgsICZz dCkgPT0gMCAmJiBTX0lTRElSKHN0LnN0X21vZGUpOworI2VuZGlmCiB9CiAKIC8qKiBUZXN0IGlm IGEgZGlyZWN0b3J5IGV4aXN0cy4KZGlmZiAtLWdpdCBhL3hhcGlhbi1jb3JlL2NvbW1vbi9pb191 dGlscy5jYyBiL3hhcGlhbi1jb3JlL2NvbW1vbi9pb191dGlscy5jYwppbmRleCAwMjFmZGM0MDVh NGQuLmM2ZDEzM2FhNGQzZCAxMDA2NDQKLS0tIGEveGFwaWFuLWNvcmUvY29tbW9uL2lvX3V0aWxz LmNjCisrKyBiL3hhcGlhbi1jb3JlL2NvbW1vbi9pb191dGlscy5jYwpAQCAtNjksNyArNjksMTcg QEAgaW9fb3Blbl9ibG9ja193cihjb25zdCBjaGFyICogZm5hbWUsIGJvb2wgYW5ldykKICAgICAv LyBVc2UgYXV0byBiZWNhdXNlIG9uIEFJWCBPX0NMT0VYRUMgbWF5IGJlIGEgNjQtYml0IGludGVn ZXIgY29uc3RhbnQuCiAgICAgYXV0byBmbGFncyA9IE9fUkRXUiB8IE9fQklOQVJZIHwgT19DTE9F WEVDOwogICAgIGlmIChhbmV3KSBmbGFncyB8PSBPX0NSRUFUIHwgT19UUlVOQzsKKyNpZmRlZiBf X1dJTjMyX18KKyAgICBzdGQ6OndzdHJpbmcgd3BhdGggPSB4dXRmOHRvd2NoYXIoZm5hbWUpOwor ICAgIGludCBmZDsKKyAgICBpZiAod3BhdGguZW1wdHkoKSkgeworICAgICAgICBmZCA9IDo6b3Bl bihmbmFtZSwgZmxhZ3MsIDA2NjYpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZkID0gOjpfd29w ZW4od3BhdGguY19zdHIoKSwgZmxhZ3MsIDA2NjYpOworICAgIH0KKyNlbHNlCiAgICAgaW50IGZk ID0gOjpvcGVuKGZuYW1lLCBmbGFncywgMDY2Nik7CisjZW5kaWYKICAgICBpZiAoZmQgPj0gTUlO X1dSSVRFX0ZEIHx8IGZkIDwgMCkgcmV0dXJuIGZkOwogCiAgICAgLy8gV2Ugd2FudCB0byBhdm9p ZCB1c2luZyBmZCA8IE1JTl9XUklURV9GRCwgaW4gY2FzZSBzb21lIG90aGVyIGNvZGUgaW4KZGlm ZiAtLWdpdCBhL3hhcGlhbi1jb3JlL2NvbW1vbi9pb191dGlscy5oIGIveGFwaWFuLWNvcmUvY29t bW9uL2lvX3V0aWxzLmgKaW5kZXggY2JhYTk5YWMwZDFiLi5lYzQ4NTNkMzM2MzUgMTAwNjQ0Ci0t LSBhL3hhcGlhbi1jb3JlL2NvbW1vbi9pb191dGlscy5oCisrKyBiL3hhcGlhbi1jb3JlL2NvbW1v bi9pb191dGlscy5oCkBAIC0zMCwxMyArMzAsMjMgQEAKICNpbmNsdWRlICJzYWZlZmNudGwuaCIK ICNpbmNsdWRlICJzYWZldW5pc3RkLmgiCiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgInBv c2l4eV93cmFwcGVyLmgiCiAKIC8qKiBPcGVuIGEgYmxvY2stYmFzZWQgZmlsZSBmb3IgcmVhZGlu Zy4KICAqCiAgKiAgQHBhcmFtIGZuYW1lICBUaGUgcGF0aCBvZiB0aGUgZmlsZSB0byBvcGVuLgog ICovCiBpbmxpbmUgaW50IGlvX29wZW5fYmxvY2tfcmQoY29uc3QgY2hhciAqIGZuYW1lKSB7Cisj aWZkZWYgX19XSU4zMl9fCisgICAgc3RkOjp3c3RyaW5nIHdwYXRoID0geHV0Zjh0b3djaGFyKGZu YW1lKTsKKyAgICBpZiAod3BhdGguZW1wdHkoKSkgeworICAgICAgICByZXR1cm4gOjpvcGVuKGZu YW1lLCBPX1JET05MWSB8IE9fQklOQVJZIHwgT19DTE9FWEVDKTsKKyAgICB9IGVsc2UgeworICAg ICAgICByZXR1cm4gOjpfd29wZW4od3BhdGguY19zdHIoKSwgT19SRE9OTFkgfCBPX0JJTkFSWSB8 IE9fQ0xPRVhFQyk7CisgICAgfQorI2Vsc2UKICAgICByZXR1cm4gOjpvcGVuKGZuYW1lLCBPX1JE T05MWSB8IE9fQklOQVJZIHwgT19DTE9FWEVDKTsKKyNlbmRpZgogfQogCiAvKiogT3BlbiBhIGJs b2NrLWJhc2VkIGZpbGUgZm9yIHJlYWRpbmcuCmRpZmYgLS1naXQgYS94YXBpYW4tY29yZS9jb21t b24vcG9zaXh5X3dyYXBwZXIuY2MgYi94YXBpYW4tY29yZS9jb21tb24vcG9zaXh5X3dyYXBwZXIu Y2MKaW5kZXggZDhmZjJjYTEwMWMwLi4wOGUzZWQxZDI3OWUgMTAwNjQ0Ci0tLSBhL3hhcGlhbi1j b3JlL2NvbW1vbi9wb3NpeHlfd3JhcHBlci5jYworKysgYi94YXBpYW4tY29yZS9jb21tb24vcG9z aXh5X3dyYXBwZXIuY2MKQEAgLTYyLDYgKzYyLDI5IEBAIHBvc2l4eV91bmxpbmsoY29uc3QgY2hh ciAqIGZpbGVuYW1lKQogI2luY2x1ZGUgInNhZmVmY250bC5oIgogI2luY2x1ZGUgInNhZmV3aW5k b3dzLmgiCiAKK3N0ZDo6d3N0cmluZyB4dXRmOHRvd2NoYXIoY29uc3Qgc3RkOjpzdHJpbmcmIGlu KQoreworICAgIHN0ZDo6d3N0cmluZyByZXQ7CisgICAgaW50IHdjaGFyY250ID0gTXVsdGlCeXRl VG9XaWRlQ2hhcigKKyAgICAgICAgQ1BfVVRGOCwgTUJfRVJSX0lOVkFMSURfQ0hBUlMsIGluLmNf c3RyKCksIGluLnNpemUoKSwgbnVsbHB0ciwgMCk7CisgICAgaWYgKHdjaGFyY250IDw9IDApIHsK KyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisgICAgd2NoYXJfdCAqd2J1ZiA9ICh3Y2hhcl90 KiltYWxsb2MoKHdjaGFyY250ICsgMSkqIHNpemVvZih3Y2hhcl90KSk7CisgICAgaWYgKG51bGxw dHIgPT0gd2J1ZikgeworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICB3Y2hhcmNudCA9 IE11bHRpQnl0ZVRvV2lkZUNoYXIoCisgICAgICAgIENQX1VURjgsIE1CX0VSUl9JTlZBTElEX0NI QVJTLCBpbi5jX3N0cigpLCBpbi5zaXplKCksIHdidWYsIHdjaGFyY250KzEpOworICAgIGlmICh3 Y2hhcmNudCA8PSAwKSB7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKyAgICByZXQuYXNzaWdu KHdidWYsIHdjaGFyY250KTsKK291dDoKKyAgICBmcmVlKHdidWYpOworICAgIHJldHVybiByZXQ7 Cit9CisKIC8qKiBDYWxsIEdldExhc3RFcnJvcigpIGFuZCBzZXQgZXJybm8gYXBwcm9wcmlhdGVs eS4gKi8KIHN0YXRpYyBpbnQKIHNldF9lcnJub19mcm9tX2dldGxhc3RlcnJvcigpCkBAIC0xNjYs OSArMTg5LDE2IEBAIGludAogcG9zaXh5X3VubGluayhjb25zdCBjaGFyICogZmlsZW5hbWUpCiB7 CiAgICAgLyogV2UgbXVzdCB1c2UgRGVsZXRlRmlsZSBhcyB0aGlzIGNhbiBkZWxldGUgZmlsZXMg dGhhdCBhcmUgb3Blbi4gKi8KLSAgICBpZiAoRGVsZXRlRmlsZShmaWxlbmFtZSkgIT0gMCkgewot CXJldHVybiAwOwotICAgIH0KKyAgICBzdGQ6OndzdHJpbmcgd3BhdGggPSB4dXRmOHRvd2NoYXIo ZmlsZW5hbWUpOworICAgIGlmICh3cGF0aC5lbXB0eSgpKSB7CisgICAgICAgIGlmIChEZWxldGVG aWxlQShmaWxlbmFtZSkgIT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0K KyAgICB9IGVsc2UgeworICAgICAgICBpZiAoRGVsZXRlRmlsZVcod3BhdGguY19zdHIoKSkgIT0g MCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9ICAgICAgICAKIAog ICAgIHJldHVybiBzZXRfZXJybm9fZnJvbV9nZXRsYXN0ZXJyb3IoKTsKIH0KQEAgLTIxOCwxNCAr MjQ4LDI3IEBAIHBvc2l4eV9vcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MpCiAJ ICAgIGJyZWFrOwogICAgIH0KIAotICAgIEhBTkRMRSBoYW5kbGVXaW4gPQotCUNyZWF0ZUZpbGUo ZmlsZW5hbWUsCi0JCSAgIGR3RGVzaXJlZEFjY2VzcywKLQkJICAgZHdTaGFyZU1vZGUsCi0JCSAg IE5VTEwsCi0JCSAgIGR3Q3JlYXRpb25EaXNwb3NpdGlvbiwKLQkJICAgRklMRV9BVFRSSUJVVEVf Tk9STUFMLAotCQkgICBOVUxMKTsKKyAgICBzdGQ6OndzdHJpbmcgd3BhdGggPSB4dXRmOHRvd2No YXIoZmlsZW5hbWUpOworICAgIEhBTkRMRSBoYW5kbGVXaW47CisgICAgaWYgKHdwYXRoLmVtcHR5 KCkpIHsKKyAgICAgICAgaGFuZGxlV2luID0KKyAgICAgICAgICAgIENyZWF0ZUZpbGVBKGZpbGVu YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgZHdEZXNpcmVkQWNjZXNzLAorICAgICAgICAg ICAgICAgICAgICAgICAgZHdTaGFyZU1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBOVUxM LAorICAgICAgICAgICAgICAgICAgICAgICAgZHdDcmVhdGlvbkRpc3Bvc2l0aW9uLAorICAgICAg ICAgICAgICAgICAgICAgICAgRklMRV9BVFRSSUJVVEVfTk9STUFMLAorICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaGFuZGxlV2luID0KKyAgICAg ICAgICAgIENyZWF0ZUZpbGVXKHdwYXRoLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAg IGR3RGVzaXJlZEFjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgZHdTaGFyZU1vZGUsCisg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgIGR3Q3Jl YXRpb25EaXNwb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgRklMRV9BVFRSSUJVVEVf Tk9STUFMLAorICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICB9CiAgICAgaWYgKGhh bmRsZVdpbiA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewogCXJldHVybiBzZXRfZXJybm9fZnJv bV9nZXRsYXN0ZXJyb3IoKTsKICAgICB9CkBAIC0yMzcsOCArMjgwLDE2IEBAIHBvc2l4eV9vcGVu KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MpCiBpbnQKIHBvc2l4eV9yZW5hbWUoY29u c3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8pCiB7Ci0gICAgaWYgKE1vdmVGaWxlRXgoZnJv bSwgdG8sIE1PVkVGSUxFX1JFUExBQ0VfRVhJU1RJTkcpICE9IDApIHsKLQlyZXR1cm4gMDsKKyAg ICBzdGQ6OndzdHJpbmcgd2Zyb20gPSB4dXRmOHRvd2NoYXIoZnJvbSk7CisgICAgc3RkOjp3c3Ry aW5nIHd0byA9IHh1dGY4dG93Y2hhcih0byk7CisgICAgaWYgKHdmcm9tLmVtcHR5KCkgfHwgd3Rv LmVtcHR5KCkpIHsKKyAgICAgICAgaWYgKE1vdmVGaWxlRXhBKGZyb20sIHRvLCBNT1ZFRklMRV9S RVBMQUNFX0VYSVNUSU5HKSAhPSAwKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg fQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChNb3ZlRmlsZUV4Vyh3ZnJvbS5jX3N0cigpLCB3 dG8uY19zdHIoKSwgTU9WRUZJTEVfUkVQTEFDRV9FWElTVElORykgIT0gMCkgeworICAgICAgICAg ICAgcmV0dXJuIDA7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gc2V0X2Vycm5vX2Zy b21fZ2V0bGFzdGVycm9yKCk7CmRpZmYgLS1naXQgYS94YXBpYW4tY29yZS9jb21tb24vcG9zaXh5 X3dyYXBwZXIuaCBiL3hhcGlhbi1jb3JlL2NvbW1vbi9wb3NpeHlfd3JhcHBlci5oCmluZGV4IDZj YTgwZGNkZDIzNS4uNGFhYzFjYjU0M2RkIDEwMDY0NAotLS0gYS94YXBpYW4tY29yZS9jb21tb24v cG9zaXh5X3dyYXBwZXIuaAorKysgYi94YXBpYW4tY29yZS9jb21tb24vcG9zaXh5X3dyYXBwZXIu aApAQCAtMjQsNiArMjQsMTAgQEAKICNkZWZpbmUgWEFQSUFOX0lOQ0xVREVEX1BPU0lYWV9XUkFQ UEVSX0gKIAogI2lmZGVmIF9fV0lOMzJfXworCisjaW5jbHVkZSA8c3RyaW5nPgorZXh0ZXJuIHN0 ZDo6d3N0cmluZyB4dXRmOHRvd2NoYXIoY29uc3Qgc3RkOjpzdHJpbmcmIGluKTsKKwogLyoqIFZl cnNpb24gb2Ygb3BlbigpIHdoaWNoIGFsbG93cyB0aGUgZmlsZSB0byBiZSB1bmxpbmtlZCB3aGls ZSBvcGVuLiAqLwogaW50IHBvc2l4eV9vcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxh Z3MpOwogCg== --wiuE8H9iPb--