net backend problems (was: Re: [sane-devel] a backend test)

mh crapsite@gmx.net
Wed, 20 Mar 2002 11:01:57 +0100


--------------Boundary-00=_9VN95SOBJV156645A72R
Content-Type: text/plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: 8bit
Subject: 

Henning Meier-Geinitz, Mittwoch, 20. März 2002 00:00:
...
> That doesn't mean that I don't find bugs but they are located in the
> backends not in tst-backend currently. I'm looking into the net
> backend and wire code currently. Lots of pleasure...

While you're working on the net backend, could you please take a look at the 
following problem ? It was introduced by a patch to solve the endianness 
problems, which I send to the list last year and which you applied, after no 
one complaint.

This code will blow up, if e.g. a frontend requests only one byte or if 
calling read() (in sane_read()) results in nread == 1.
In this case, the frontend/net backend will hang forever.

If you don't have a better solution already, please review the attached 
patch. 
To make testing a little easier, the patched net backend reads the 
environment variable SANE_FORCE_WRONG_ENDIANNESS. If you set it,
you can test byte-swapping also, if server/client have the same byte order.
To test scanning "one byte at a time", either hack the frontend, or uncomment 
the line
/* max_length = 1;*/
in sane_read().

Michael
--------------Boundary-00=_9VN95SOBJV156645A72R
Content-Type: text/x-diff;
  charset="iso-8859-1";
  name="net.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="net.patch"

LS0tIG5ldC5jCVN1biBKYW4gIDYgMjI6MzI6NTcgMjAwMgorKysgbmV0LW1oLmMJV2VkIE1hciAy
MCAxMDozODo0OSAyMDAyCkBAIC00MCw3ICs0MCw3IEBACiAKICAgIFRoaXMgZmlsZSBpbXBsZW1l
bnRzIGEgU0FORSBuZXR3b3JrLWJhc2VkIG1ldGEgYmFja2VuZC4gICovCiAKLS8qIFBsZWFzZSBp
bmNyZWFzZSB2ZXJzaW9uIG51bWJlciB3aXRoIGV2ZXJ5IGNoYW5nZSAKKy8qIFBsZWFzZSBpbmNy
ZWFzZSB2ZXJzaW9uIG51bWJlciB3aXRoIGV2ZXJ5IGNoYW5nZQogICAgKGRvbid0IGZvcmdldCB0
byB1cGRhdGUgbmV0LmRlc2MpICovCiAjZGVmaW5lIE5FVF9WRVJTSU9OICIxLjAuNiIKIApAQCAt
OTEsOCArOTEsMjUgQEAKIHN0YXRpYyBpbnQgY2xpZW50X2JpZ19lbmRpYW47IC8qIDEgPT0gYmln
IGVuZGlhbjsgMCA9PSBsaXR0bGUgZW5kaWFuICovCiBzdGF0aWMgaW50IHNlcnZlcl9iaWdfZW5k
aWFuOyAvKiAxID09IGJpZyBlbmRpYW47IDAgPT0gbGl0dGxlIGVuZGlhbiAqLwogc3RhdGljIGlu
dCBkZXB0aDsgLyogYml0cyBwZXIgcGl4ZWwgKi8KLXN0YXRpYyBpbnQgaGFuZ19vdmVyOyAvKiAt
MSA9PSBubyBoYW5nb3Zlcjsgb3RoZXJ3aXNlIGNhc3QgdmFsdWUgdG8gCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqLworLypUaGlzIHZhcmlhYmxlIGlzIG9ubHkgbmVl
ZGVkLCBpZiB0aGUgZGVwdGggaXMgMTZiaXQvY2hhbm5lbCBhbmQgY2xpZW50L3NldmVyCitoYXZl
IGRpZmZlcmVudCBlbmRpYW5uZXNzLgorQSB2YWx1ZSBvZiAtMSBtZWFucywgdGhhdCB0aGVyZSdz
IG5vIGhhbmcgb3Zlcjsgb3RoZXJ3aXNlIHRoZSB2YWx1ZSBoYXMgdG8gYmUKK2Nhc3RlZCB0byBT
QU5FX0J5dGUuCitoYW5nX292ZXIgbWVhbnMsIHRoYXQgdGhlcmUgaXMgYSByZW1haW5pbmcgYnl0
ZSBmcm9tIGEgcHJldmlvdXMgY2FsbCB0byBzYW5lX3JlYWQsCit3aGljaCBjb3VsZCBub3QgYmUg
Ynl0ZS1zd2FwcGVkLCBlLmcuIGJlY2F1c2UgdGhlIGZyb250ZW5kIHJlcXVlc3RlZCAgYW4gb2Rk
CitudW1iZXIgb2YgYnl0ZXMuKi8KKworc3RhdGljIGludCBoYW5nX292ZXI7CisKKy8qVGhpcyB2
YXJpYWJsZSBpcyBvbmx5IG5lZWRlZCwgaWYgdGhlIGRlcHRoIGlzIDE2Yml0L2NoYW5uZWwgYW5k
IGNsaWVudC9zZXZlcgoraGF2ZSBkaWZmZXJlbnQgZW5kaWFubmVzcy4KK0EgdmFsdWUgb2YgLTEg
bWVhbnMsIHRoYXQgdGhlcmUncyBubyBsZWZ0IG92ZXI7IG90aGVyd2lzZSB0aGUgdmFsdWUgaGFz
IHRvIGJlCitjYXN0ZWQgdG8gU0FORV9CeXRlLgorbGVmdF9vdmVyIG1lYW5zLCB0aGF0IHRoZXJl
IGlzIGEgcmVtYWluaW5nIGJ5dGUgZnJvbSBhIHByZXZpb3VzIGNhbGwgdG8gc2FuZV9yZWFkLAor
d2hpY2ggYWxyZWFkeSBpcyBpbiB0aGUgdGhlIGNvcnJlY3QgYnl0ZSBvcmRlciwgYnV0IGNvdWxk
IG5vdCBiZSByZXR1cm5lZCwgZS5nLgorYmVjYXVzZSB0aGUgZnJvbnRlbmQgcmVxdWVzdGVkIG9u
bHkgb25lIGJ5dGUgcGVyIGNhbGwuKi8KKworc3RhdGljIGludCBsZWZ0X292ZXI7CiAKIHN0YXRp
YyBTQU5FX1N0YXR1cwogYWRkX2RldmljZSAoY29uc3QgY2hhciAqbmFtZSwgTmV0X0RldmljZSAq
KiBuZHApCkBAIC0xMDY1LDYgKzEwODIsNyBAQAogU0FORV9TdGF0dXMKIHNhbmVfc3RhcnQgKFNB
TkVfSGFuZGxlIGhhbmRsZSkKIHsKKyAgY29uc3QgY2hhciAqZW52X2VuZGlhbiA9IE5VTEw7CiAg
IE5ldF9TY2FubmVyICpzID0gaGFuZGxlOwogICBTQU5FX1N0YXJ0X1JlcGx5IHJlcGx5OwogICBz
dHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwpAQCAtMTA3Nyw2ICsxMDk1LDcgQEAKICAgREJHICgzLCAi
c2FuZV9zdGFydFxuIik7CiAKICAgaGFuZ19vdmVyID0gLTE7CisgIGxlZnRfb3ZlciA9IC0xOwog
CiAgIGlmIChzLT5kYXRhID49IDApCiAgICAgewpAQCAtMTExOSw2ICsxMTM4LDE3IEBACiAJICBz
ZXJ2ZXJfYmlnX2VuZGlhbiA9IDE7CiAJICBEQkcgKDEsICJzYW5lX3N0YXJ0OiBzZXJ2ZXIgaGFz
IGJpZyBlbmRpYW4gYnl0ZSBvcmRlclxuIik7CiAJfQorICAgICAgLypIQUNLOiBUcnkgdG8gcmVh
ZCBlbnYgdmFyaWFibGU7IHRoaXMgaXMgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seQorICAgICAg
ICBzZXR0aW5nIFNBTkVfRk9SQ0VfV1JPTkdfRU5ESUFOTkVTUyBmb3JjZXMgdGhlIG5ldCBiYWNr
ZW5kIHRvIHN3YXAKKwlieXRlcyBpbiAxNmJpdC9jaGFubmVsIG1vZGVzKi8KKyAgICAgIGVudl9l
bmRpYW4gPSBnZXRlbnYgKCJTQU5FX0ZPUkNFX1dST05HX0VORElBTk5FU1MiKTsKKyAgICAgIGlm
KGVudl9lbmRpYW4pCisgICAgICB7CisgICAgICAgIGlmKGNsaWVudF9iaWdfZW5kaWFuID09IDEp
CisJICBzZXJ2ZXJfYmlnX2VuZGlhbiA9IDA7CisJZWxzZQorCSAgc2VydmVyX2JpZ19lbmRpYW4g
PSAxOworICAgICAgfQogICAgICAgbmVlZF9hdXRoID0gKHJlcGx5LnJlc291cmNlX3RvX2F1dGhv
cml6ZSAhPSAwKTsKICAgICAgIGlmIChuZWVkX2F1dGgpCiAJewpAQCAtMTE3Miw5ICsxMjAyLDE2
IEBACiAgIE5ldF9TY2FubmVyICpzID0gaGFuZGxlOwogICBzc2l6ZV90IG5yZWFkOwogICBTQU5F
X0ludCBjbnQ7CisgIFNBTkVfSW50IHN0YXJ0X2NudDsKKyAgU0FORV9JbnQgZW5kX2NudDsKICAg
U0FORV9CeXRlIHN3YXBfYnVmOwotCi0gIERCRyAoMywgInNhbmVfcmVhZDogbWF4X2xlbmd0aCA9
ICVkXG4iLCBtYXhfbGVuZ3RoKTsKKyAgU0FORV9CeXRlIHRlbXBfaGFuZ19vdmVyOworICBpbnQg
aXNfZXZlbjsKKyAgaXNfZXZlbiA9IDE7CisvKiB1bmNvbW1lbnQgdG8gZm9yY2Ugb25lIGJ5dGUg
cGVyIGNhbGwgKi8KKy8qIHRoaXMgd2lsbCBiZSB2ZXJ5IHNsb3chICovCisvKiBtYXhfbGVuZ3Ro
ID0gMTsqLworICBEQkcgKDMsICJcblxuc2FuZV9yZWFkOiBtYXhfbGVuZ3RoID0gJWRcbiIsIG1h
eF9sZW5ndGgpOwogCiAgIGlmICghbGVuZ3RoKQogICAgIHsKQEAgLTExODQsNiArMTIyMSwyMiBA
QAogCiAgICpsZW5ndGggPSAwOwogCisgIC8qSWYgdGhlcmUncyBhIGxlZnQgb3ZlciwgaS5lLiBh
IGJ5dGUgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBieXRlIG9yZGVyLCByZXR1cm4KKyAgICBpdCBp
bW1lZGlhdGVseTsgb3RoZXJ3aXNlIHJlYWQgbWF5IGZhaWwgd2l0aCBhIFNBTkVfU1RBVFVTX0VP
RiBhbmQgdGhlIGNhbGxlcgorICAgIG5ldmVyIGNhbiByZWFkIHRoZSBsYXN0IGJ5dGUgKi8KKyAg
aWYgKChkZXB0aCA9PSAxNikgJiYgKHNlcnZlcl9iaWdfZW5kaWFuICE9IGNsaWVudF9iaWdfZW5k
aWFuKSkKKyAgeworICAgIGlmKGxlZnRfb3ZlciA+IC0xKQorICAgIHsKKyAgICAgIERCRyAoMSwi
c2FuZV9yZWFkOiBsZWZ0X292ZXIgZnJvbSBwcmV2aW91cyBjYWxsLCByZXR1cm4gaW1tZWRpYXRl
bHlcbiIpOworICAgICAgLypyZXR1cm4gdGhlIGJ5dGUsIHdlJ3ZlIGN1cnJlbnRseSBzY2FubmVk
OyBoYW5nX292ZXIgYmVjb21lcyBsZWZ0X292ZXIqLworICAgICAgKmRhdGEgPSAoU0FORV9CeXRl
KSBsZWZ0X292ZXI7CisgICAgICBsZWZ0X292ZXIgPSAtMTsKKyAgICAgICpsZW5ndGggPSAxOwor
ICAgICAgcmV0dXJuIFNBTkVfU1RBVFVTX0dPT0Q7CisgICAgfQorICB9CisKICAgaWYgKHMtPmRh
dGEgPCAwKQogICAgIHsKICAgICAgIERCRyAoMSwgInNhbmVfcmVhZDogZGF0YSBwaXBlIGRvZXNu
J3QgZXhpc3QsIHNjYW4gY2FuY2VsbGVkP1xuIik7CkBAIC0xMjUzLDQ0ICsxMzA2LDggQEAKICAg
aWYgKG1heF9sZW5ndGggPiAoU0FORV9JbnQpIHMtPmJ5dGVzX3JlbWFpbmluZykKICAgICBtYXhf
bGVuZ3RoID0gcy0+Ynl0ZXNfcmVtYWluaW5nOwogCi0gIC8qIElmIHdlIGFyZSBzY2FubmluZyB3
aXRoIDE2IGJpdHMvcGl4ZWwsIHdlIG11c3QgYmUgc3VyZSB0byBzY2FuIGNvbXBsZXRlCi0gICAg
IHBpeGVscy4gT3RoZXJ3aXNlIGl0J3MgaW1wb3NzaWJsZSB0byBzd2FwIHRoZSBieXRlcywgc2lu
Y2Ugd2UgZG9uJ3QgaGF2ZQotICAgICBhY2Nlc3MgdG8gdGhlIHByZXZpb3VzIGRhdGEgaWYgc2Fu
ZV9yZWFkIGlzIGNhbGxlZCB0aGUgbmV4dAotICAgICB0aW1lLiBUaGVyZWZvcmUgd2UgY2hlY2ss
IHdoZXRoZXIgYW4gb2RkIG51bWJlciBvYiBieXRlcyB3YXMgcmVhZC4gSWYKLSAgICAgdGhpcyBp
cyB0cnVlLCB0aGUgbGFzdCBieXRlIGlzIHN0b3JlZCBpbiBoYW5nX292ZXIgYW5kIGxlbmd0aCBp
cwotICAgICBkZWNyZWFzZWQgYnkgMS4KLSAgKi8KLQotICAvKiBDaGVjayB3aGV0aGVyIHdlIGFy
ZSBzY2FubmluZyB3aXRoIGEgZGVwdGggb2YgMTYgYml0cy9waXhlbCBhbmQgd2hldGhlcgotICAg
ICBzZXJ2ZXIgYW5kIGNsaWVudCBoYXZlIGRpZmZlcmVudCBieXRlIG9yZGVyLiBJZiB0aGlzIGlz
IHRydWUsIHRoZW4gaXQncwotICAgICBuZWNjZXNzYXJ5IHRvIGNoZWNrIHdoZXRoZXIgdGhlcmUn
cyBhIGhhbmdfb3ZlciBmcm9tIGEgcHJldmlvdXMgY2FsbCB0bwotICAgICBzYW5lX3JlYWQuCi0g
ICovCi0KLSAgaWYgKChkZXB0aCA9PSAxNikgJiYgKHNlcnZlcl9iaWdfZW5kaWFuICE9IGNsaWVu
dF9iaWdfZW5kaWFuKSkKLSAgICB7Ci0gICAgICBEQkcgKDQsICJzYW5lX3JlYWQ6IGNsaWVudC9z
ZXJ2ZXIgaGF2ZSBkaWZmZXJlbnQgYnl0ZSBvcmRlclxuIik7Ci0gICAgICAKLSAgICAgIGlmICho
YW5nX292ZXIgPiAtMSkKLQl7Ci0JICBEQkcgKDQsICJzYW5lX3JlYWQ6IGhhbmdfb3ZlciBmcm9t
IHByZXZpb3VzIGNhbGwgdG8gc2FuZV9yZWFkKClcbiIpOwotCSAgKihkYXRhKSA9ICh1bnNpZ25l
ZCBjaGFyKSBoYW5nX292ZXI7Ci0JICBEQkcgKDQsICJzYW5lX3JlYWQ6IHJlYWRpbmcgaW1hZ2Ug
ZGF0YSBub3dcbiIpOwotCSAgbnJlYWQgPSByZWFkIChzLT5kYXRhLCBkYXRhICsgMSwgbWF4X2xl
bmd0aCAtIDEpOwotCX0KLSAgICAgIGVsc2UKLQl7Ci0JICBEQkcgKDQsICJzYW5lX3JlYWQ6IG5v
IGhhbmdfb3ZlciBmcm9tIHByZXZpb3VzIGNhbGwgdG8gIgotCSAgICAgICAic2FuZV9yZWFkKClc
biIpOwotCSAgREJHICg0LCAic2FuZV9yZWFkOiByZWFkaW5nIGltYWdlIGRhdGEgbm93XG4iKTsK
LQkgIG5yZWFkID0gcmVhZCAocy0+ZGF0YSwgZGF0YSwgbWF4X2xlbmd0aCk7Ci0JfQotICAgIH0K
LSAgZWxzZQotICAgIHsKLSAgICAgIERCRyAoNCwgInNhbmVfcmVhZDogcmVhZGluZyBpbWFnZSBk
YXRhIG5vd1xuIik7Ci0gICAgICBucmVhZCA9IHJlYWQgKHMtPmRhdGEsIGRhdGEsIG1heF9sZW5n
dGgpOwotICAgIH0KKyAgICBucmVhZCA9IHJlYWQgKHMtPmRhdGEsIGRhdGEsIG1heF9sZW5ndGgp
OworICAgIHMtPmJ5dGVzX3JlbWFpbmluZyAtPSBucmVhZDsKIAogICBpZiAobnJlYWQgPCAwKQog
ICAgIHsKQEAgLTEzMDUsMzkgKzEzMjIsODkgQEAKIAl9CiAgICAgfQogCisgICpsZW5ndGggPSBu
cmVhZDsKICAgLyogQ2hlY2sgd2hldGhlciB3ZSBhcmUgc2Nhbm5pbmcgd2l0aCBhIGRlcHRoIG9m
IDE2IGJpdHMvcGl4ZWwgYW5kIHdoZXRoZXIKICAgICAgc2VydmVyIGFuZCBjbGllbnQgaGF2ZSBk
aWZmZXJlbnQgYnl0ZSBvcmRlci4gSWYgdGhpcyBpcyB0cnVlLCB0aGVuIGl0J3MKICAgICAgbmVj
Y2Vzc2FyeSB0byBjaGVjayB3aGV0aGVyIHJlYWQgcmV0dXJuZWQgYW4gb2RkIG51bWJlci4gSWYg
YW4gb2RkIG51bWJlcgogICAgICBoYXMgYmVlbiByZXR1cm5lZCwgd2UgbXVzdCBzYXZlIHRoZSBs
YXN0IGJ5dGUuCiAgICovCiAgIGlmICgoZGVwdGggPT0gMTYpICYmIChzZXJ2ZXJfYmlnX2VuZGlh
biAhPSBjbGllbnRfYmlnX2VuZGlhbikpCi0gICAgeworICB7CiAgICAgICBEQkcgKDEsInNhbmVf
cmVhZDogY2xpZW50L3NlcnZlciBoYXZlIGRpZmZlcmVudCBieXRlIG9yZGVyOyAiCiAJICAgIm11
c3Qgc3dhcFxuIik7Ci0gICAgICBzLT5ieXRlc19yZW1haW5pbmcgLT0gbnJlYWQ7Ci0gICAgICBp
ZiAoMCAhPSBucmVhZCAlIDIpCi0JewotCSAgREJHICgxLCAic2FuZV9yZWFkOiBudW1iZXIgb2Yg
Ynl0ZXMgcmVhZCBpcyBvZGQ7IHN0b3JlIGhhbmdfb3ZlclxuIik7Ci0JICAqbGVuZ3RoID0gbnJl
YWQgLSAxOwotCSAgaGFuZ19vdmVyID0gKihkYXRhICsgbnJlYWQpOwotCX0KKyAgICAgIC8qc3Bl
Y2lhbCBjYXNlOiAxIGJ5dGUgc2Nhbm5lZCBhbmQgaGFuZ19vdmVyKi8KKyAgICAgIGlmKChucmVh
ZCA9PSAxKSAgJiYgKGhhbmdfb3ZlciA+IC0xKSkKKyAgICAgIHsKKyAgICAgICAgLypyZXR1cm4g
dGhlIGJ5dGUsIHdlJ3ZlIGN1cnJlbnRseSBzY2FubmVkOyBoYW5nX292ZXIgYmVjb21lcyBsZWZ0
X292ZXIqLworICAgICAgICBsZWZ0X292ZXIgPSBoYW5nX292ZXI7CisgICAgICAgIGhhbmdfb3Zl
ciA9IC0xOworCXJldHVybiBTQU5FX1NUQVRVU19HT09EOworICAgICAgfQorICAgICAgLypjaGVj
ayB3aGV0aGVyIGFuIGV2ZW4gb3IgYW4gb2RkIG51bWJlciBvZiBieXRlcyBoYXMgYmVlbiBzY2Fu
bmVkKi8KKyAgICAgIGlmKChucmVhZCAlIDIpID09IDApCisgICAgICAgIGlzX2V2ZW4gPSAxOwog
ICAgICAgZWxzZQotCXsKLQkgICpsZW5ndGggPSBucmVhZDsKKyAgICAgICAgaXNfZXZlbiA9IDA7
CisgICAgICAvKmNoZWNrLCB3aGV0aGVyIHRoZXJlJ3MgYSBoYW5nIG92ZXIgZnJvbSBhIHByZXZp
b3VzIGNhbGw7CisgICAgICAgIGluIHRoaXMgY2FzZSB3ZSBtZW1jb3B5IHRoZSBkYXRhIHVwIG9u
ZSBieXRlKi8KKyAgICAgIGlmKChucmVhZCA+IDEpICAmJiAoaGFuZ19vdmVyID4gLTEpKQorICAg
ICAgeworICAgICAgICAvKiBzdG9yZSBsYXN0IGJ5dGUqLworCXRlbXBfaGFuZ19vdmVyID0gKihk
YXRhICsgbnJlYWQgLTEpOworCW1lbWNvcHkoZGF0YSsxLGRhdGEsbnJlYWQtMSk7CisJKmRhdGEg
PSAoU0FORV9CeXRlKSBoYW5nX292ZXI7CisgICAgICAgIC8qd2hhdCBoYXBwZW5zIHdpdGggdGhl
IGxhc3QgYnl0ZSBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIG51bWJlciBvZiBieXRlcworCSAgaXMg
ZXZlbiBvciBvZGQqLworICAgICAgICBpZihpc19ldmVuID09IDEpCisJeworCSAgLypudW1iZXIg
b2YgYnl0ZXMgaXMgZXZlbjsgbm8gbmV3IGhhbmdfb3ZlciwgZXhjaGFuZ2UgbGFzdCBieXRlIHdp
dGgKKwkgICAgaGFuZyBvdmVyOyBsYXN0IGJ5dGUgYmVjb21lcyBsZWZ0X292ZXIqLworCSAgbGVm
dF9vdmVyID0gKihkYXRhICsgbnJlYWQgLTEpOworICAgICAgICAgICooZGF0YSArIG5yZWFkIC0x
KSA9IHRlbXBfaGFuZ19vdmVyOwogCSAgaGFuZ19vdmVyID0gLTE7Ci0JfQotICAgICAgLyogRmlu
YWxseSBzdGVwIHRocm91Z2ggdGhlIGJ1ZmZlciBhbmQgc3dhcCBieXRlcyAqLwotICAgICAgZm9y
IChjbnQgPSAwOyBjbnQgPCAqbGVuZ3RoIC0gMTsgY250ICs9IDIpCi0JewotCSAgc3dhcF9idWYg
PSAqKGRhdGEgK2NudCk7Ci0JICAqKGRhdGEgKyBjbnQpID0gKihkYXRhICsgY250ICsgMSk7Ci0J
ICAqKGRhdGEgKyBjbnQgKyAxKSA9IHN3YXBfYnVmOwotCX0KLSAgICB9Ci0gIGVsc2UKLSAgICB7
Ci0gICAgICBzLT5ieXRlc19yZW1haW5pbmcgLT0gbnJlYWQ7Ci0gICAgICAqbGVuZ3RoID0gbnJl
YWQ7CisgICAgICAgICAgc3RhcnRfY250ID0gMDsKKyAgICAgICAgICAvKmxhc3QgYnl0ZSBhbHJl
YWR5IHN3YXBwZWQqLworCSAgZW5kX2NudCA9IG5yZWFkIC0gMjsKKwl9CisJZWxzZQorCXsKKwkg
IC8qbnVtYmVyIG9mIGJ5dGVzIGlzIG9kZDsgbGFzdCBieXRlIGJlY29tZXMgbmV3IGhhbmdfb3Zl
ciovCisJICBoYW5nX292ZXIgPSB0ZW1wX2hhbmdfb3ZlcjsKKyAgICAgICAgICBsZWZ0X292ZXIg
PSAtMTsKKwkgIHN0YXJ0X2NudCA9IDA7CisJICBlbmRfY250ID0gbnJlYWQgLSAxOworCX0KKyAg
ICAgIH0KKyAgICAgIGVsc2UgaWYobnJlYWQgPT0gMSkKKyAgICAgIHsKKyAgICAgICAgLyppZiBv
bmx5IG9uZSBieXRlIGhhcyBiZWVuIHJlYWQsIHNhdmUgaXQgYXMgaGFuZ19vdmVyIGFuZCByZXR1
cm4gbGVuZ3RoID0wICovCisJaGFuZ19vdmVyID0gKGludCkgKmRhdGE7CisJKmxlbmd0aCA9IDA7
CisJcmV0dXJuIFNBTkVfU1RBVFVTX0dPT0Q7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7
CisgICAgICAgIC8qbm8gaGFuZ19vdmVyOyB0ZXN0IGZvciBldmVuIG9yIG9kZCBieXRlIG51bWJl
ciAqLworCWlmKGlzX2V2ZW4gPT0gMSkKKwl7CisgICAgICAgICAgc3RhcnRfY250ID0gMDsKKwkg
IGVuZF9jbnQgPSAqbGVuZ3RoOworCX0KKyAgICAgICAgZWxzZQorCXsKKyAgICAgICAgICBzdGFy
dF9jbnQgPSAwOworCSAgaGFuZ19vdmVyID0gKihkYXRhICsgKmxlbmd0aCAtMSk7CisJICAqbGVu
Z3RoIC09IDE7CisJICBlbmRfY250ID0gKmxlbmd0aDsKKwl9CisgICAgICB9CisgICAgICAvKnN3
YXAgdGhlIGJ5dGVzICovCisgICAgICBmb3IgKGNudCA9IHN0YXJ0X2NudDsgY250IDwgZW5kX2Nu
dCAtIDE7IGNudCArPSAyKQorICAgICAgeworICAgICAgICBzd2FwX2J1ZiA9ICooZGF0YSArY250
KTsKKyAgICAgICAgKihkYXRhICsgY250KSA9ICooZGF0YSArIGNudCArIDEpOworICAgICAgICAq
KGRhdGEgKyBjbnQgKyAxKSA9IHN3YXBfYnVmOworICAgICAgfQogICAgIH0KICAgREJHICgzLCAi
c2FuZV9yZWFkOiAlZCBieXRlcyByZWFkLCAlZCByZW1haW5pbmdcbiIsIG5yZWFkLAogICAgICAg
IHMtPmJ5dGVzX3JlbWFpbmluZyk7Cg==

--------------Boundary-00=_9VN95SOBJV156645A72R--