bin/83358: [patch] improper handling of malloc failures within
rexec()
Garrett Cooper
yanefbsd at gmail.com
Sat Jun 21 05:10:07 UTC 2008
The following reply was made to PR bin/83358; it has been noted by GNATS.
From: "Garrett Cooper" <yanefbsd at gmail.com>
To: bug-followup at FreeBSD.org, dan at obluda.cz
Cc:
Subject: Re: bin/83358: [patch] improper handling of malloc failures within rexec()
Date: Fri, 20 Jun 2008 22:07:16 -0700
------=_Part_14701_30557979.1214024836491
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
This patch includes the fixes provided previously (minus the port var
removal provided by the OP), plus some style fixes and source
updating.
Which makes me wonder: is libcompat-4.3's rexec.c used for compiling
purposes at all?
-Garrett
------=_Part_14701_30557979.1214024836491
Content-Type: text/x-patch; name=4_3_compat_update.patch
Content-Transfer-Encoding: base64
X-Attachment-Id: f_fhpr0ztf0
Content-Disposition: attachment; filename=4_3_compat_update.patch
SW5kZXg6IGNmcmVlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvbmN2cy9zcmMvbGliL2xp
YmNvbXBhdC80LjMvY2ZyZWUuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXUgLXIx
LjMgY2ZyZWUuYwotLS0gY2ZyZWUuYwk5IEphbiAyMDA3IDAxOjAyOjAyIC0wMDAwCTEuMworKysg
Y2ZyZWUuYwkyMSBKdW4gMjAwOCAwNDo1MjoxMSAtMDAwMApAQCAtMzcsOCArMzcsNyBAQAogI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgogCiB2b2lkCi1jZnJlZShwKQotCXZvaWQgKnA7CitjZnJlZSh2b2lk
ICpwKQogewogCWZyZWUocCk7CiB9CkluZGV4OiByZWdleC5jCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9ob21lL25jdnMvc3JjL2xpYi9saWJjb21wYXQvNC4zL3JlZ2V4LmMsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNQpkaWZmIC11IC1yMS41IHJlZ2V4LmMKLS0tIHJlZ2V4LmMJOSBKYW4gMjAwNyAw
MTowMjowMiAtMDAwMAkxLjUKKysrIHJlZ2V4LmMJMjEgSnVuIDIwMDggMDQ6NTI6MTIgLTAwMDAK
QEAgLTU2LDE3ICs1NiwxNiBAQAogc3RhdGljIGNoYXIgKnJlX2VycnN0cjsKIAogY2hhciAqCi1y
ZV9jb21wKHMpCi0JY2hhciAqczsKK3JlX2NvbXAoY2hhciAqcykKIHsKIAlpZiAocyA9PSBOVUxM
IHx8ICpzID09ICdcMCcpIHsKIAkJaWYgKHJlX3JlZ2V4cCA9PSBOVUxMKQogCQkJcmV0dXJuICJu
byBwcmV2aW91cyByZWd1bGFyIGV4cHJlc3Npb24iOwogCQlyZXR1cm4gKE5VTEwpOwogCX0KLQlp
ZiAocmVfcmVnZXhwKQorCWlmIChyZV9yZWdleHAgIT0gTlVMTCkKIAkJZnJlZShyZV9yZWdleHAp
OwotCWlmIChyZV9lcnJzdHIpCisJaWYgKHJlX2VycnN0ciAhPSBOVUxMKQogCQlmcmVlKHJlX2Vy
cnN0cik7CiAJcmVfZ290ZXJyID0gMDsKIAlyZV9yZWdleHAgPSByZWdjb21wKHMpOwpAQCAtODks
NyArODgsNyBAQAogCWNvbnN0IGNoYXIgKnM7CiB7CiAJcmVfZ290ZXJyID0gMTsKLQlpZiAocmVf
ZXJyc3RyKQorCWlmIChyZV9lcnJzdHIgIT0gTlVMTCkKIAkJZnJlZShyZV9lcnJzdHIpOwogCXJl
X2VycnN0ciA9IHN0cmR1cChzKTsKIH0KSW5kZXg6IHJleGVjLmMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2hvbWUvbmN2cy9zcmMvbGliL2xpYmNvbXBhdC80LjMvcmV4ZWMuYyx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS43CmRpZmYgLXUgLXIxLjcgcmV4ZWMuYwotLS0gcmV4ZWMuYwk5IEphbiAyMDA3
IDAxOjAyOjAyIC0wMDAwCTEuNworKysgcmV4ZWMuYwkyMSBKdW4gMjAwOCAwNDo1MjoxMyAtMDAw
MApAQCAtMzAsNyArMzAsNyBAQAogICovCiAKICNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRl
ZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylyZXhlYy5jCTguMSAoQmVy
a2VsZXkpIDYvNC85MyI7CitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmV4ZWMuYyAgICA4
LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwogI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQg
Ki8KIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgpAQCAtNTEsMzM5ICs1MSwzNjkgQEAKICNpbmNs
dWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAotaW50CXJleGVjb3B0aW9uczsK
LWNoYXIJKmdldHBhc3MoKSwgKmdldGxvZ2luKCk7CitjaGFyICAgICpnZXRwYXNzKCk7CitjaGFy
ICAgICpnZXRsb2dpbigpOwogCiAvKgogICogT3B0aW9ucyBhbmQgb3RoZXIgc3RhdGUgaW5mby4K
ICAqLwogc3RydWN0IG1hY2VsIHsKLQljaGFyIG1hY19uYW1lWzldOwkvKiBtYWNybyBuYW1lICov
Ci0JY2hhciAqbWFjX3N0YXJ0OwkvKiBzdGFydCBvZiBtYWNybyBpbiBtYWNidWYgKi8KLQljaGFy
ICptYWNfZW5kOwkJLyogZW5kIG9mIG1hY3JvIGluIG1hY2J1ZiAqLworICAgICAgICBjaGFyIG1h
Y19uYW1lWzldOyAgICAvKiBtYWNybyBuYW1lICovCisgICAgICAgIGNoYXIgKm1hY19zdGFydDsg
ICAgLyogc3RhcnQgb2YgbWFjcm8gaW4gbWFjYnVmICovCisgICAgICAgIGNoYXIgKm1hY19lbmQ7
ICAgICAgICAvKiBlbmQgb2YgbWFjcm8gaW4gbWFjYnVmICovCiB9OwogCi1pbnQgbWFjbnVtOwkJ
CS8qIG51bWJlciBvZiBkZWZpbmVkIG1hY3JvcyAqLworaW50IG1hY251bTsgICAgICAgICAgICAv
KiBudW1iZXIgb2YgZGVmaW5lZCBtYWNyb3MgKi8KIHN0cnVjdCBtYWNlbCBtYWNyb3NbMTZdOwog
Y2hhciBtYWNidWZbNDA5Nl07CiAKLXN0YXRpYwlGSUxFICpjZmlsZTsKK3N0YXRpYyAgICBGSUxF
ICpjZmlsZTsKIAogI2RlZmluZQlERUZBVUxUCTEKICNkZWZpbmUJTE9HSU4JMgogI2RlZmluZQlQ
QVNTV0QJMwotI2RlZmluZQlBQ0NPVU5UIDQKLSNkZWZpbmUgTUFDREVGICA1CisjZGVmaW5lCUFD
Q09VTlQJNAorI2RlZmluZSBNQUNERUYJNQogI2RlZmluZQlJRAkxMAogI2RlZmluZQlNQUNICTEx
CiAKIHN0YXRpYyBjaGFyIHRva3ZhbFsxMDBdOwogCiBzdGF0aWMgc3RydWN0IHRva3RhYiB7Ci0J
Y2hhciAqdG9rc3RyOwotCWludCB0dmFsOworICAgICAgICBjaGFyICp0b2tzdHI7CisgICAgICAg
IGludCB0dmFsOwogfSB0b2t0YWJbXT0gewotCXsgImRlZmF1bHQiLAlERUZBVUxUIH0sCi0JeyAi
bG9naW4iLAlMT0dJTiB9LAotCXsgInBhc3N3b3JkIiwJUEFTU1dEIH0sCi0JeyAicGFzc3dkIiwJ
UEFTU1dEIH0sCi0JeyAiYWNjb3VudCIsCUFDQ09VTlQgfSwKLQl7ICJtYWNoaW5lIiwJTUFDSCB9
LAotCXsgIm1hY2RlZiIsCU1BQ0RFRiB9LAotCXsgTlVMTCwJCTAgfQorICAgICAgICB7ICJkZWZh
dWx0IiwJREVGQVVMVCB9LAorICAgICAgICB7ICJsb2dpbiIsCUxPR0lOIH0sCisgICAgICAgIHsg
InBhc3N3b3JkIiwJUEFTU1dEIH0sCisgICAgICAgIHsgInBhc3N3ZCIsCVBBU1NXRCB9LAorICAg
ICAgICB7ICJhY2NvdW50IiwJQUNDT1VOVCB9LAorICAgICAgICB7ICJtYWNoaW5lIiwJTUFDSCB9
LAorICAgICAgICB7ICJtYWNkZWYiLAlNQUNERUYgfSwKKyAgICAgICAgeyBOVUxMLAkJMCB9CiB9
OwogCiBzdGF0aWMgaW50CiB0b2tlbigpCiB7Ci0JY2hhciAqY3A7Ci0JaW50IGM7Ci0Jc3RydWN0
IHRva3RhYiAqdDsKLQotCWlmIChmZW9mKGNmaWxlKSB8fCBmZXJyb3IoY2ZpbGUpKQotCQlyZXR1
cm4gKDApOwotCXdoaWxlICgoYyA9IGdldGMoY2ZpbGUpKSAhPSBFT0YgJiYKLQkgICAgKGMgPT0g
J1xuJyB8fCBjID09ICdcdCcgfHwgYyA9PSAnICcgfHwgYyA9PSAnLCcpKQotCQljb250aW51ZTsK
LQlpZiAoYyA9PSBFT0YpCi0JCXJldHVybiAoMCk7Ci0JY3AgPSB0b2t2YWw7Ci0JaWYgKGMgPT0g
JyInKSB7Ci0JCXdoaWxlICgoYyA9IGdldGMoY2ZpbGUpKSAhPSBFT0YgJiYgYyAhPSAnIicpIHsK
LQkJCWlmIChjID09ICdcXCcpCi0JCQkJYyA9IGdldGMoY2ZpbGUpOwotCQkJKmNwKysgPSBjOwot
CQl9Ci0JfSBlbHNlIHsKLQkJKmNwKysgPSBjOwotCQl3aGlsZSAoKGMgPSBnZXRjKGNmaWxlKSkg
IT0gRU9GCi0JCSAgICAmJiBjICE9ICdcbicgJiYgYyAhPSAnXHQnICYmIGMgIT0gJyAnICYmIGMg
IT0gJywnKSB7Ci0JCQlpZiAoYyA9PSAnXFwnKQotCQkJCWMgPSBnZXRjKGNmaWxlKTsKLQkJCSpj
cCsrID0gYzsKLQkJfQotCX0KLQkqY3AgPSAwOwotCWlmICh0b2t2YWxbMF0gPT0gMCkKLQkJcmV0
dXJuICgwKTsKLQlmb3IgKHQgPSB0b2t0YWI7IHQtPnRva3N0cjsgdCsrKQotCQlpZiAoIXN0cmNt
cCh0LT50b2tzdHIsIHRva3ZhbCkpCi0JCQlyZXR1cm4gKHQtPnR2YWwpOwotCXJldHVybiAoSUQp
OworICAgICAgICBjaGFyICpjcDsKKyAgICAgICAgaW50IGM7CisgICAgICAgIHN0cnVjdCB0b2t0
YWIgKnQ7CisKKyAgICAgICAgaWYgKGZlb2YoY2ZpbGUpIHx8IGZlcnJvcihjZmlsZSkpCisgICAg
ICAgICAgICByZXR1cm4gKDApOworICAgICAgICB3aGlsZSAoKGMgPSBnZXRjKGNmaWxlKSkgIT0g
RU9GICYmCisgICAgICAgICAgICAoYyA9PSAnXG4nIHx8IGMgPT0gJ1x0JyB8fCBjID09ICcgJyB8
fCBjID09ICcsJykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPT0gRU9G
KQorICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgY3AgPSB0b2t2YWw7CisgICAgICAg
IGlmIChjID09ICciJykgeworICAgICAgICAgICAgd2hpbGUgKChjID0gZ2V0YyhjZmlsZSkpICE9
IEVPRiAmJiBjICE9ICciJykgeworICAgICAgICAgICAgICAgIGlmIChjID09ICdcXCcpCisgICAg
ICAgICAgICAgICAgICAgIGMgPSBnZXRjKGNmaWxlKTsKKyAgICAgICAgICAgICAgICAqY3ArKyA9
IGM7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqY3ArKyA9
IGM7CisgICAgICAgICAgICB3aGlsZSAoKGMgPSBnZXRjKGNmaWxlKSkgIT0gRU9GCisgICAgICAg
ICAgICAgICAgJiYgYyAhPSAnXG4nICYmIGMgIT0gJ1x0JyAmJiBjICE9ICcgJyAmJiBjICE9ICcs
JykgeworICAgICAgICAgICAgICAgIGlmIChjID09ICdcXCcpCisgICAgICAgICAgICAgICAgICAg
IGMgPSBnZXRjKGNmaWxlKTsKKyAgICAgICAgICAgICAgICAqY3ArKyA9IGM7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgKmNwID0gMDsKKyAgICAgICAgaWYgKHRva3ZhbFswXSA9
PSAwKQorICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgZm9yICh0ID0gdG9rdGFiOyB0
LT50b2tzdHI7IHQrKykKKyAgICAgICAgICAgIGlmICghc3RyY21wKHQtPnRva3N0ciwgdG9rdmFs
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKHQtPnR2YWwpOworICAgICAgICByZXR1cm4gKElE
KTsKIH0KIAogc3RhdGljIGludAotcnVzZXJwYXNzKGhvc3QsIGFuYW1lLCBhcGFzcywgYWFjY3Qp
Ci0JY2hhciAqaG9zdCwgKiphbmFtZSwgKiphcGFzcywgKiphYWNjdDsKK3J1c2VycGFzcyhjaGFy
ICpob3N0LCBjaGFyICoqYW5hbWUsIGNoYXIgKiphcGFzcywgY2hhciAqKmFhY2N0KQogewotCWNo
YXIgKmhkaXIsIGJ1ZltCVUZTSVpdLCAqdG1wOwotCWNoYXIgbXluYW1lW01BWEhPU1ROQU1FTEVO
XSwgKm15ZG9tYWluOwotCWludCB0LCBpLCBjLCB1c2VkZWZhdWx0ID0gMDsKLQlzdHJ1Y3Qgc3Rh
dCBzdGI7Ci0KLQloZGlyID0gZ2V0ZW52KCJIT01FIik7Ci0JaWYgKGhkaXIgPT0gTlVMTCkKLQkJ
aGRpciA9ICIuIjsKLQlpZiAoc3RybGVuKGhkaXIpICsgOCA+IHNpemVvZihidWYpKQotCQlyZXR1
cm4gKDApOwotCSh2b2lkKSBzcHJpbnRmKGJ1ZiwgIiVzLy5uZXRyYyIsIGhkaXIpOwotCWNmaWxl
ID0gZm9wZW4oYnVmLCAiciIpOwotCWlmIChjZmlsZSA9PSBOVUxMKSB7Ci0JCWlmIChlcnJubyAh
PSBFTk9FTlQpCi0JCQl3YXJuKCIlcyIsIGJ1Zik7Ci0JCXJldHVybiAoMCk7Ci0JfQotCWlmIChn
ZXRob3N0bmFtZShteW5hbWUsIHNpemVvZihteW5hbWUpKSA8IDApCi0JCW15bmFtZVswXSA9ICdc
MCc7Ci0JaWYgKChteWRvbWFpbiA9IHN0cmNocihteW5hbWUsICcuJykpID09IE5VTEwpCi0JCW15
ZG9tYWluID0gIiI7CisgICAgICAgIGNoYXIgKmhkaXIsIGJ1ZltCVUZTSVpdLCAqdG1wOworICAg
ICAgICBjaGFyIG15bmFtZVtNQVhIT1NUTkFNRUxFTl0sICpteWRvbWFpbjsKKyAgICAgICAgaW50
IHQsIGksIGMsIHVzZWRlZmF1bHQgPSAwOworICAgICAgICBpbnQgcmV0X2NvZGUgPSAwOworICAg
ICAgICBzdHJ1Y3Qgc3RhdCBzdGI7CisKKyAgICAgICAgaGRpciA9IGdldGVudigiSE9NRSIpOwor
ICAgICAgICBpZiAoaGRpciA9PSBOVUxMKQorICAgICAgICAgICAgaGRpciA9ICIuIjsKKyAgICAg
ICAgaWYgKHN0cmxlbihoZGlyKSArIDggPiBzaXplb2YoYnVmKSkKKyAgICAgICAgICAgIHJldHVy
biAoMCk7CisgICAgICAgIHNwcmludGYoYnVmLCAiJXMvLm5ldHJjIiwgaGRpcik7CisgICAgICAg
IGNmaWxlID0gZm9wZW4oYnVmLCAiciIpOworICAgICAgICBpZiAoY2ZpbGUgPT0gTlVMTCkgewor
ICAgICAgICAgICAgaWYgKGVycm5vICE9IEVOT0VOVCkKKyAgICAgICAgICAgICAgICB3YXJuKCIl
cyIsIGJ1Zik7CisgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICB9CisgICAgICAgIGlm
IChnZXRob3N0bmFtZShteW5hbWUsIHNpemVvZihteW5hbWUpKSA8IDApCisgICAgICAgICAgICBt
eW5hbWVbMF0gPSAnXDAnOworICAgICAgICBpZiAoKG15ZG9tYWluID0gc3RyY2hyKG15bmFtZSwg
Jy4nKSkgPT0gTlVMTCkKKyAgICAgICAgICAgIG15ZG9tYWluID0gIiI7CiBuZXh0OgotCXdoaWxl
ICgodCA9IHRva2VuKCkpKSBzd2l0Y2godCkgeworICAgICAgICB3aGlsZSAoKHQgPSB0b2tlbigp
KSAhPSAwKSB7CisKKyAgICAgICAgICAgIHN3aXRjaCh0KSB7CisgICAgICAgICAgICBjYXNlIERF
RkFVTFQ6CisgICAgICAgICAgICAgICAgdXNlZGVmYXVsdCA9IDE7CisgICAgICAgICAgICAgICAg
LyogRkFMTCBUSFJPVUdIICovCisKKyAgICAgICAgICAgIGNhc2UgTUFDSDoKKyAgICAgICAgICAg
ICAgICBpZiAoIXVzZWRlZmF1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuKCkg
IT0gSUQpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICogQWxsb3cgbWF0Y2ggZWl0aGVyIGZvciB1
c2VyJ3MgaW5wdXQgaG9zdAorICAgICAgICAgICAgICAgICAgICAgKiBuYW1lIG9yIG9mZmljaWFs
IGhvc3RuYW1lLiAgQWxzbyBhbGxvdyBtYXRjaAorICAgICAgICAgICAgICAgICAgICAgKiBvZiBp
bmNvbXBsZXRlbHktc3BlY2lmaWVkIGhvc3QgaW4gbG9jYWwKKyAgICAgICAgICAgICAgICAgICAg
ICogZG9tYWluLgorICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAg
aWYgKHN0cmNhc2VjbXAoaG9zdCwgdG9rdmFsKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAg
ICAgZ290byBtYXRjaDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh0bXAgPSBzdHJjaHIoaG9z
dCwgJy4nKSkgIT0gTlVMTCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgc3RyY2FzZWNtcCh0
bXAsIG15ZG9tYWluKSA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJuY2FzZWNt
cChob3N0LCB0b2t2YWwsIHRtcC1ob3N0KSA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAg
ICB0b2t2YWxbdG1wIC0gaG9zdF0gPT0gJ1wwJykgeworICAgICAgICAgICAgICAgICAgICAgICAg
Z290byBtYXRjaDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXRjaDoKKyAgICAgICAg
ICAgICAgICB3aGlsZSAoKHQgPSB0b2tlbigpKSAmJiB0ICE9IE1BQ0ggJiYgdCAhPSBERUZBVUxU
KSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0KSB7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgTE9HSU46CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4oKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqYW5hbWUgPT0gMCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqYW5hbWUgPSBtYWxsb2Moc3RybGVuKHRva3ZhbCkrMSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqYW5hbWUgPT0gTlVMTCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybngoIm1hbGxvYyBmb3IgYW5hbWUg
ZmFpbGVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFk
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cmNweSgqYW5hbWUsIHRva3ZhbCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0
cmNtcCgqYW5hbWUsIHRva3ZhbCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnb3RvIG5leHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgUEFTU1dEOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgqYW5h
bWUgPT0gMCB8fCBzdHJjbXAoKmFuYW1lLCAiYW5vbnltb3VzIikpICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZnN0YXQoZmlsZW5vKGNmaWxlKSwgJnN0YikgPj0gMCAmJgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChzdGIuc3RfbW9kZSAmIDA3NykgIT0gMCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdhcm54KCJFcnJvcjogLm5ldHJjIGZpbGUgaXMgcmVhZGFi
bGUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYnkgb3RoZXJzLlxuUmVtb3Zl
IHBhc3N3b3JkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG9yIG1ha2UgZmls
ZSB1bnJlYWRhYmxlIGJ5IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG90aGVy
cy5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFkOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuKCkgJiYg
KmFwYXNzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYXBhc3MgPSBt
YWxsb2Moc3RybGVuKHRva3ZhbCkrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCphcGFzcyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm54
KCJtYWxsb2MgZm9yIGFwYXNzIGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdvdG8gYmFkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJjcHkoKmFwYXNzLCB0b2t2YWwpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQUNDT1VOVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmc3Rh
dChmaWxlbm8oY2ZpbGUpLCAmc3RiKSA+PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JiYgKHN0Yi5zdF9tb2RlICYgMDc3KSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2FybngoIkVycm9yOiAubmV0cmMgZmlsZSBpcyByZWFkYWJsZSIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIiBieSBvdGhlcnMuXG5SZW1vdmUgYWNjb3VudCIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiBvciBtYWtlIGZpbGUgdW5yZWFkYWJsZSBieSIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBvdGhlcnMuXG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnb3RvIGJhZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbigpICYmICphYWNjdCA9PSBOVUxMKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFhY2N0ID0gbWFsbG9jKHN0cmxlbih0b2t2YWwp
KzEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqYWFjY3QgPT0gTlVMTCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJueCgibWFsbG9jIGZvciBhYWNjdCBm
YWlsZWRcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhZDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RyY3B5KCphYWNjdCwgdG9rdmFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIE1BQ0RF
RjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoYz1nZXRjKGNmaWxlKSkgIT0gRU9G
ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGMgPT0gJyAnIHx8IGMgPT0gJ1x0Jykp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOdWxsIGxvb3AgYm9keSAqLworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0g
RU9GIHx8IGMgPT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm54KCJN
aXNzaW5nIG1hY2RlZiBuYW1lIGFyZ3VtZW50LlxuIik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ290byBiYWQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobWFjbnVtID09IDE2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2FybngoIkxpbWl0IG9mIDE2IG1hY3JvcyBoYXZlIGFscmVhZHkgYmVlbiBkZWZpbmVkXG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhZDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IG1hY3Jvc1ttYWNudW1d
Lm1hY19uYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgKnRtcCsrID0gYzsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgOCAmJiAoYz1nZXRjKGNmaWxlKSkgIT0gRU9G
ICYmICFpc3NwYWNlKGMpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdG1w
KysgPSBjOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGMgPT0gRU9GKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybngoIk1h
Y3JvIGRlZmluaXRpb24gbWlzc2luZyBudWxsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiIGxpbmUgdGVybWluYXRvci5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdvdG8gYmFkOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgKnRtcCA9ICdcMCc7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPSAnXG4n
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChjPWdldGMoY2ZpbGUpKSAh
PSBFT0YgJiYgYyAhPSAnXG4nKSA7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoYyA9PSBFT0YpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3YXJueCgiTWFjcm8gZGVmaW5pdGlvbiBtaXNzaW5nIG51bGwiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIgbGluZSB0ZXJtaW5hdG9yLlxuIik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ290byBiYWQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobWFjbnVtID09IDApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYWNyb3NbbWFjbnVtXS5tYWNfc3RhcnQgPSBtYWNidWY7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYWNyb3NbbWFjbnVtXS5tYWNfc3RhcnQgPQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYWNyb3NbbWFjbnVtLTFdLm1hY19lbmQgKyAxOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gbWFj
cm9zW21hY251bV0ubWFjX3N0YXJ0OworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRt
cCAhPSBtYWNidWYgKyA0MDk2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChj
PWdldGMoY2ZpbGUpKSA9PSBFT0YpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2FybngoIk1hY3JvIGRlZmluaXRpb24gbWlzc2luZyIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICIgbnVsbCBsaW5lIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIiB0ZXJtaW5hdG9yLlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdvdG8gYmFkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqdG1wID0gYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
KnRtcCA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqKHRt
cC0xKSA9PSAnXDAnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY3Jv
c1ttYWNudW0rK10ubWFjX2VuZCA9IHRtcC0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqdG1wID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wKys7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wID09IG1h
Y2J1ZiArIDQwOTYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJueCgiNEsgbWFj
cm8gYnVmZmVyIGV4Y2VlZGVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv
IGJhZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICAgICAgd2FybngoIlVua25vd24gLm5ldHJjIGtleXdvcmQgJXMiLCB0b2t2YWwpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdvdG8gZG9uZTsK
KworICAgICAgICB9CisKKyAgICAgICAgZ290byBkb25lOwogCi0JY2FzZSBERUZBVUxUOgotCQl1
c2VkZWZhdWx0ID0gMTsKLQkJLyogRkFMTCBUSFJPVUdIICovCi0KLQljYXNlIE1BQ0g6Ci0JCWlm
ICghdXNlZGVmYXVsdCkgewotCQkJaWYgKHRva2VuKCkgIT0gSUQpCi0JCQkJY29udGludWU7Ci0J
CQkvKgotCQkJICogQWxsb3cgbWF0Y2ggZWl0aGVyIGZvciB1c2VyJ3MgaW5wdXQgaG9zdCBuYW1l
Ci0JCQkgKiBvciBvZmZpY2lhbCBob3N0bmFtZS4gIEFsc28gYWxsb3cgbWF0Y2ggb2YKLQkJCSAq
IGluY29tcGxldGVseS1zcGVjaWZpZWQgaG9zdCBpbiBsb2NhbCBkb21haW4uCi0JCQkgKi8KLQkJ
CWlmIChzdHJjYXNlY21wKGhvc3QsIHRva3ZhbCkgPT0gMCkKLQkJCQlnb3RvIG1hdGNoOwotCQkJ
aWYgKCh0bXAgPSBzdHJjaHIoaG9zdCwgJy4nKSkgIT0gTlVMTCAmJgotCQkJICAgIHN0cmNhc2Vj
bXAodG1wLCBteWRvbWFpbikgPT0gMCAmJgotCQkJICAgIHN0cm5jYXNlY21wKGhvc3QsIHRva3Zh
bCwgdG1wIC0gaG9zdCkgPT0gMCAmJgotCQkJICAgIHRva3ZhbFt0bXAgLSBob3N0XSA9PSAnXDAn
KQotCQkJCWdvdG8gbWF0Y2g7Ci0JCQljb250aW51ZTsKLQkJfQotCW1hdGNoOgotCQl3aGlsZSAo
KHQgPSB0b2tlbigpKSAmJiB0ICE9IE1BQ0ggJiYgdCAhPSBERUZBVUxUKSBzd2l0Y2godCkgewot
Ci0JCWNhc2UgTE9HSU46Ci0JCQlpZiAodG9rZW4oKSkKLQkJCQlpZiAoKmFuYW1lID09IDApIHsK
LQkJCQkJKmFuYW1lID0gbWFsbG9jKCh1bnNpZ25lZCkgc3RybGVuKHRva3ZhbCkgKyAxKTsKLQkJ
CQkJKHZvaWQpIHN0cmNweSgqYW5hbWUsIHRva3ZhbCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYg
KHN0cmNtcCgqYW5hbWUsIHRva3ZhbCkpCi0JCQkJCQlnb3RvIG5leHQ7Ci0JCQkJfQotCQkJYnJl
YWs7Ci0JCWNhc2UgUEFTU1dEOgotCQkJaWYgKCgqYW5hbWUgPT0gMCB8fCBzdHJjbXAoKmFuYW1l
LCAiYW5vbnltb3VzIikpICYmCi0JCQkgICAgZnN0YXQoZmlsZW5vKGNmaWxlKSwgJnN0YikgPj0g
MCAmJgotCQkJICAgIChzdGIuc3RfbW9kZSAmIDA3NykgIT0gMCkgewotCXdhcm54KCJFcnJvcjog
Lm5ldHJjIGZpbGUgaXMgcmVhZGFibGUgYnkgb3RoZXJzLiIpOwotCXdhcm54KCJSZW1vdmUgcGFz
c3dvcmQgb3IgbWFrZSBmaWxlIHVucmVhZGFibGUgYnkgb3RoZXJzLiIpOwotCQkJCWdvdG8gYmFk
OwotCQkJfQotCQkJaWYgKHRva2VuKCkgJiYgKmFwYXNzID09IDApIHsKLQkJCQkqYXBhc3MgPSBt
YWxsb2MoKHVuc2lnbmVkKSBzdHJsZW4odG9rdmFsKSArIDEpOwotCQkJCSh2b2lkKSBzdHJjcHko
KmFwYXNzLCB0b2t2YWwpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgQUNDT1VOVDoKLQkJCWlm
IChmc3RhdChmaWxlbm8oY2ZpbGUpLCAmc3RiKSA+PSAwCi0JCQkgICAgJiYgKHN0Yi5zdF9tb2Rl
ICYgMDc3KSAhPSAwKSB7Ci0Jd2FybngoIkVycm9yOiAubmV0cmMgZmlsZSBpcyByZWFkYWJsZSBi
eSBvdGhlcnMuIik7Ci0Jd2FybngoIlJlbW92ZSBhY2NvdW50IG9yIG1ha2UgZmlsZSB1bnJlYWRh
YmxlIGJ5IG90aGVycy4iKTsKLQkJCQlnb3RvIGJhZDsKLQkJCX0KLQkJCWlmICh0b2tlbigpICYm
ICphYWNjdCA9PSAwKSB7Ci0JCQkJKmFhY2N0ID0gbWFsbG9jKCh1bnNpZ25lZCkgc3RybGVuKHRv
a3ZhbCkgKyAxKTsKLQkJCQkodm9pZCkgc3RyY3B5KCphYWNjdCwgdG9rdmFsKTsKLQkJCX0KLQkJ
CWJyZWFrOwotCQljYXNlIE1BQ0RFRjoKLQkJCXdoaWxlICgoYz1nZXRjKGNmaWxlKSkgIT0gRU9G
ICYmCi0JCQkJCQkoYyA9PSAnICcgfHwgYyA9PSAnXHQnKSkKLQkJCQk7Ci0JCQlpZiAoYyA9PSBF
T0YgfHwgYyA9PSAnXG4nKSB7Ci0JCQkJcHJpbnRmKCJNaXNzaW5nIG1hY2RlZiBuYW1lIGFyZ3Vt
ZW50LlxuIik7Ci0JCQkJZ290byBiYWQ7Ci0JCQl9Ci0JCQlpZiAobWFjbnVtID09IDE2KSB7Ci0J
CQkJcHJpbnRmKCJMaW1pdCBvZiAxNiBtYWNyb3MgaGF2ZSBhbHJlYWR5IGJlZW4gZGVmaW5lZFxu
Iik7Ci0JCQkJZ290byBiYWQ7Ci0JCQl9Ci0JCQl0bXAgPSBtYWNyb3NbbWFjbnVtXS5tYWNfbmFt
ZTsKLQkJCSp0bXArKyA9IGM7Ci0JCQlmb3IgKGk9MDsgaSA8IDggJiYgKGM9Z2V0YyhjZmlsZSkp
ICE9IEVPRiAmJgotCQkJICAgICFpc3NwYWNlKGMpOyArK2kpIHsKLQkJCQkqdG1wKysgPSBjOwot
CQkJfQotCQkJaWYgKGMgPT0gRU9GKSB7Ci0JCQkJcHJpbnRmKCJNYWNybyBkZWZpbml0aW9uIG1p
c3NpbmcgbnVsbCBsaW5lIHRlcm1pbmF0b3IuXG4iKTsKLQkJCQlnb3RvIGJhZDsKLQkJCX0KLQkJ
CSp0bXAgPSAnXDAnOwotCQkJaWYgKGMgIT0gJ1xuJykgewotCQkJCXdoaWxlICgoYz1nZXRjKGNm
aWxlKSkgIT0gRU9GICYmIGMgIT0gJ1xuJyk7Ci0JCQl9Ci0JCQlpZiAoYyA9PSBFT0YpIHsKLQkJ
CQlwcmludGYoIk1hY3JvIGRlZmluaXRpb24gbWlzc2luZyBudWxsIGxpbmUgdGVybWluYXRvci5c
biIpOwotCQkJCWdvdG8gYmFkOwotCQkJfQotCQkJaWYgKG1hY251bSA9PSAwKSB7Ci0JCQkJbWFj
cm9zW21hY251bV0ubWFjX3N0YXJ0ID0gbWFjYnVmOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJbWFj
cm9zW21hY251bV0ubWFjX3N0YXJ0ID0gbWFjcm9zW21hY251bS0xXS5tYWNfZW5kICsgMTsKLQkJ
CX0KLQkJCXRtcCA9IG1hY3Jvc1ttYWNudW1dLm1hY19zdGFydDsKLQkJCXdoaWxlICh0bXAgIT0g
bWFjYnVmICsgNDA5NikgewotCQkJCWlmICgoYz1nZXRjKGNmaWxlKSkgPT0gRU9GKSB7Ci0JCQkJ
cHJpbnRmKCJNYWNybyBkZWZpbml0aW9uIG1pc3NpbmcgbnVsbCBsaW5lIHRlcm1pbmF0b3IuXG4i
KTsKLQkJCQkJZ290byBiYWQ7Ci0JCQkJfQotCQkJCSp0bXAgPSBjOwotCQkJCWlmICgqdG1wID09
ICdcbicpIHsKLQkJCQkJaWYgKCoodG1wLTEpID09ICdcMCcpIHsKLQkJCQkJICAgbWFjcm9zW21h
Y251bSsrXS5tYWNfZW5kID0gdG1wIC0gMTsKLQkJCQkJICAgYnJlYWs7Ci0JCQkJCX0KLQkJCQkJ
KnRtcCA9ICdcMCc7Ci0JCQkJfQotCQkJCXRtcCsrOwotCQkJfQotCQkJaWYgKHRtcCA9PSBtYWNi
dWYgKyA0MDk2KSB7Ci0JCQkJcHJpbnRmKCI0SyBtYWNybyBidWZmZXIgZXhjZWVkZWRcbiIpOwot
CQkJCWdvdG8gYmFkOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQl3YXJueCgiVW5r
bm93biAubmV0cmMga2V5d29yZCAlcyIsIHRva3ZhbCk7Ci0JCQlicmVhazsKLQkJfQotCQlnb3Rv
IGRvbmU7Ci0JfQotZG9uZToKLQkodm9pZCkgZmNsb3NlKGNmaWxlKTsKLQlyZXR1cm4gKDApOwog
YmFkOgotCSh2b2lkKSBmY2xvc2UoY2ZpbGUpOwotCXJldHVybiAoLTEpOworICAgICAgICByZXRf
Y29kZSA9IC0xOworZG9uZToKKyAgICAgICAgZmNsb3NlKGNmaWxlKTsKKyAgICAgICAgcmV0dXJu
IHJldF9jb2RlOwogfQogCiBpbnQKLXJleGVjKGFob3N0LCBycG9ydCwgbmFtZSwgcGFzcywgY21k
LCBmZDJwKQotCWNoYXIgKiphaG9zdDsKLQlpbnQgcnBvcnQ7Ci0JY2hhciAqbmFtZSwgKnBhc3Ms
ICpjbWQ7Ci0JaW50ICpmZDJwOworcmV4ZWMoY2hhciAqKmFob3N0LCBpbnQgcnBvcnQsIGNoYXIg
Km5hbWUsIGNoYXIgKnBhc3MsIGNoYXIgKmNtZCwgaW50ICpmZDJwKQogewotCXN0cnVjdCBzb2Nr
YWRkcl9pbiBzaW4sIHNpbjIsIGZyb207Ci0Jc3RydWN0IGhvc3RlbnQgKmhwOwotCXVfc2hvcnQg
cG9ydDsKLQlpbnQgcywgdGltbyA9IDEsIHMzOwotCWNoYXIgYzsKLQotCWhwID0gZ2V0aG9zdGJ5
bmFtZSgqYWhvc3QpOwotCWlmIChocCA9PSAwKSB7Ci0JCWhlcnJvcigqYWhvc3QpOwotCQlyZXR1
cm4gKC0xKTsKLQl9Ci0JKmFob3N0ID0gaHAtPmhfbmFtZTsKLQlydXNlcnBhc3MoaHAtPmhfbmFt
ZSwgJm5hbWUsICZwYXNzKTsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luIHNpbiwgc2luMiwg
ZnJvbTsKKyAgICAgICAgc3RydWN0IGhvc3RlbnQgKmhwOworICAgICAgICB1X3Nob3J0IHBvcnQ7
CisgICAgICAgIGludCBzLCB0aW1vID0gMSwgczM7CisgICAgICAgIGNoYXIgYzsKKworICAgICAg
ICBocCA9IGdldGhvc3RieW5hbWUoKmFob3N0KTsKKyAgICAgICAgaWYgKGhwID09IE5VTEwpIHsK
KyAgICAgICAgICAgIGhlcnJvcigqYWhvc3QpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAg
ICAgICB9CisgICAgICAgICphaG9zdCA9IGhwLT5oX25hbWU7CisgICAgICAgIHJ1c2VycGFzcyho
cC0+aF9uYW1lLCAmbmFtZSwgJnBhc3MpOwogcmV0cnk6Ci0JcyA9IHNvY2tldChBRl9JTkVULCBT
T0NLX1NUUkVBTSwgMCk7Ci0JaWYgKHMgPCAwKSB7Ci0JCXBlcnJvcigicmV4ZWM6IHNvY2tldCIp
OwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0Jc2luLnNpbl9mYW1pbHkgPSBocC0+aF9hZGRydHlwZTsK
LQlzaW4uc2luX3BvcnQgPSBycG9ydDsKLQliY29weShocC0+aF9hZGRyLCAoY2FkZHJfdCkmc2lu
LnNpbl9hZGRyLCBocC0+aF9sZW5ndGgpOwotCWlmIChjb25uZWN0KHMsIChzdHJ1Y3Qgc29ja2Fk
ZHIgKikmc2luLCBzaXplb2Yoc2luKSkgPCAwKSB7Ci0JCWlmIChlcnJubyA9PSBFQ09OTlJFRlVT
RUQgJiYgdGltbyA8PSAxNikgewotCQkJKHZvaWQpIGNsb3NlKHMpOwotCQkJc2xlZXAodGltbyk7
Ci0JCQl0aW1vICo9IDI7Ci0JCQlnb3RvIHJldHJ5OwotCQl9Ci0JCXBlcnJvcihocC0+aF9uYW1l
KTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCWlmIChmZDJwID09IDApIHsKLQkJKHZvaWQpIHdyaXRl
KHMsICIiLCAxKTsKLQkJcG9ydCA9IDA7Ci0JfSBlbHNlIHsKLQkJY2hhciBudW1bOF07Ci0JCWlu
dCBzMiwgc2luMmxlbjsKLQotCQlzMiA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7
Ci0JCWlmIChzMiA8IDApIHsKLQkJCSh2b2lkKSBjbG9zZShzKTsKLQkJCXJldHVybiAoLTEpOwot
CQl9Ci0JCWxpc3RlbihzMiwgMSk7Ci0JCXNpbjJsZW4gPSBzaXplb2YgKHNpbjIpOwotCQlpZiAo
Z2V0c29ja25hbWUoczIsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luMiwgJnNpbjJsZW4pIDwgMCB8
fAotCQkgIHNpbjJsZW4gIT0gc2l6ZW9mIChzaW4yKSkgewotCQkJcGVycm9yKCJnZXRzb2NrbmFt
ZSIpOwotCQkJKHZvaWQpIGNsb3NlKHMyKTsKLQkJCWdvdG8gYmFkOwotCQl9Ci0JCXBvcnQgPSBu
dG9ocygodV9zaG9ydClzaW4yLnNpbl9wb3J0KTsKLQkJKHZvaWQpIHNwcmludGYobnVtLCAiJXUi
LCBwb3J0KTsKLQkJKHZvaWQpIHdyaXRlKHMsIG51bSwgc3RybGVuKG51bSkrMSk7Ci0JCXsgaW50
IGxlbiA9IHNpemVvZiAoZnJvbSk7Ci0JCSAgczMgPSBhY2NlcHQoczIsIChzdHJ1Y3Qgc29ja2Fk
ZHIgKikmZnJvbSwgJmxlbik7Ci0JCSAgY2xvc2UoczIpOwotCQkgIGlmIChzMyA8IDApIHsKLQkJ
CXBlcnJvcigiYWNjZXB0Iik7Ci0JCQlwb3J0ID0gMDsKLQkJCWdvdG8gYmFkOwotCQkgIH0KLQkJ
fQotCQkqZmQycCA9IHMzOwotCX0KLQkodm9pZCkgd3JpdGUocywgbmFtZSwgc3RybGVuKG5hbWUp
ICsgMSk7Ci0JLyogc2hvdWxkIHB1YmxpYyBrZXkgZW5jeXB0IHRoZSBwYXNzd29yZCBoZXJlICov
Ci0JKHZvaWQpIHdyaXRlKHMsIHBhc3MsIHN0cmxlbihwYXNzKSArIDEpOwotCSh2b2lkKSB3cml0
ZShzLCBjbWQsIHN0cmxlbihjbWQpICsgMSk7Ci0JaWYgKHJlYWQocywgJmMsIDEpICE9IDEpIHsK
LQkJcGVycm9yKCphaG9zdCk7Ci0JCWdvdG8gYmFkOwotCX0KLQlpZiAoYyAhPSAwKSB7Ci0JCXdo
aWxlIChyZWFkKHMsICZjLCAxKSA9PSAxKSB7Ci0JCQkodm9pZCkgd3JpdGUoMiwgJmMsIDEpOwot
CQkJaWYgKGMgPT0gJ1xuJykKLQkJCQlicmVhazsKLQkJfQotCQlnb3RvIGJhZDsKLQl9Ci0JcmV0
dXJuIChzKTsKKyAgICAgICAgcyA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7Cisg
ICAgICAgIGlmIChzIDwgMCkgeworICAgICAgICAgICAgcGVycm9yKCJyZXhlYzogc29ja2V0Iik7
CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgc2luLnNpbl9mYW1p
bHkgPSBocC0+aF9hZGRydHlwZTsKKyAgICAgICAgc2luLnNpbl9wb3J0ID0gcnBvcnQ7CisgICAg
ICAgIGJjb3B5KGhwLT5oX2FkZHIsIChjYWRkcl90KSZzaW4uc2luX2FkZHIsIGhwLT5oX2xlbmd0
aCk7CisgICAgICAgIGlmIChjb25uZWN0KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBzaXpl
b2Yoc2luKSkgPCAwKSB7CisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUNPTk5SRUZVU0VEICYm
IHRpbW8gPD0gMTYpIHsKKyAgICAgICAgICAgICAgICBjbG9zZShzKTsKKyAgICAgICAgICAgICAg
ICBzbGVlcCh0aW1vKTsKKyAgICAgICAgICAgICAgICB0aW1vICo9IDI7CisgICAgICAgICAgICAg
ICAgZ290byByZXRyeTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBlcnJvcihocC0+aF9u
YW1lKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZmQy
cCA9PSBOVUxMKSB7CisgICAgICAgICAgICB3cml0ZShzLCAiIiwgMSk7CisgICAgICAgICAgICBw
b3J0ID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNoYXIgbnVtWzhdOworICAg
ICAgICAgICAgaW50IHMyLCBzaW4ybGVuOworCisgICAgICAgICAgICBzMiA9IHNvY2tldChBRl9J
TkVULCBTT0NLX1NUUkVBTSwgMCk7CisgICAgICAgICAgICBpZiAoczIgPCAwKSB7CisgICAgICAg
ICAgICAgICAgY2xvc2Uocyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbGlzdGVuKHMyLCAxKTsKKyAgICAgICAgICAgIHNpbjJsZW4gPSBz
aXplb2YgKHNpbjIpOworICAgICAgICAgICAgaWYgKGdldHNvY2tuYW1lKHMyLCAoc3RydWN0IHNv
Y2thZGRyICopJnNpbjIsICZzaW4ybGVuKSA8IDAgfHwKKyAgICAgICAgICAgICAgc2luMmxlbiAh
PSBzaXplb2YgKHNpbjIpKSB7CisgICAgICAgICAgICAgICAgcGVycm9yKCJnZXRzb2NrbmFtZSIp
OworICAgICAgICAgICAgICAgIGNsb3NlKHMyKTsKKyAgICAgICAgICAgICAgICBnb3RvIGJhZDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBvcnQgPSBudG9ocygodV9zaG9ydClzaW4yLnNp
bl9wb3J0KTsKKyAgICAgICAgICAgIHNwcmludGYobnVtLCAiJXUiLCBwb3J0KTsKKyAgICAgICAg
ICAgIHdyaXRlKHMsIG51bSwgc3RybGVuKG51bSkrMSk7CisgICAgICAgICAgICB7IGludCBsZW4g
PSBzaXplb2YgKGZyb20pOworICAgICAgICAgICAgICBzMyA9IGFjY2VwdChzMiwgKHN0cnVjdCBz
b2NrYWRkciAqKSZmcm9tLCAmbGVuKTsKKyAgICAgICAgICAgICAgY2xvc2UoczIpOworICAgICAg
ICAgICAgICBpZiAoczMgPCAwKSB7CisgICAgICAgICAgICAgICAgcGVycm9yKCJhY2NlcHQiKTsK
KyAgICAgICAgICAgICAgICBwb3J0ID0gMDsKKyAgICAgICAgICAgICAgICBnb3RvIGJhZDsKKyAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgKmZkMnAgPSBzMzsKKyAg
ICAgICAgfQorICAgICAgICB3cml0ZShzLCBuYW1lLCBzdHJsZW4obmFtZSkgKyAxKTsKKyAgICAg
ICAgLyogc2hvdWxkIHB1YmxpYyBrZXkgZW5jeXB0IHRoZSBwYXNzd29yZCBoZXJlICovCisgICAg
ICAgIHdyaXRlKHMsIHBhc3MsIHN0cmxlbihwYXNzKSArIDEpOworICAgICAgICB3cml0ZShzLCBj
bWQsIHN0cmxlbihjbWQpICsgMSk7CisgICAgICAgIGlmIChyZWFkKHMsICZjLCAxKSAhPSAxKSB7
CisgICAgICAgICAgICBwZXJyb3IoKmFob3N0KTsKKyAgICAgICAgICAgIGdvdG8gYmFkOworICAg
ICAgICB9CisgICAgICAgIGlmIChjICE9IDApIHsKKyAgICAgICAgICAgIHdoaWxlIChyZWFkKHMs
ICZjLCAxKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgd3JpdGUoMiwgJmMsIDEpOworICAgICAg
ICAgICAgICAgIGlmIChjID09ICdcbicpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZ290byBiYWQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHM7CiBiYWQ6Ci0JaWYgKHBvcnQpCi0JCSh2b2lkKSBjbG9zZSgqZmQycCk7Ci0JKHZvaWQp
IGNsb3NlKHMpOwotCXJldHVybiAoLTEpOworICAgICAgICBpZiAocG9ydCkKKyAgICAgICAgICAg
IGNsb3NlKCpmZDJwKTsKKyAgICAgICAgY2xvc2Uocyk7CisgICAgICAgIHJldHVybiAtMTsKIH0K
------=_Part_14701_30557979.1214024836491--
More information about the freebsd-bugs
mailing list