Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v7NAU-001jpj-PU for pgsql-hackers@arkaria.postgresql.org; Sat, 11 Oct 2025 00:09:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1v7N9T-00Eiis-10 for pgsql-hackers@arkaria.postgresql.org; Sat, 11 Oct 2025 00:07:59 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v7N9S-00Eiij-Eh for pgsql-hackers@lists.postgresql.org; Sat, 11 Oct 2025 00:07:59 +0000 Received: from meldrar.postgresql.org ([2a02:c0:301:0:ffff::31]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1v7N9R-0017Pl-01 for pgsql-hackers@lists.postgresql.org; Sat, 11 Oct 2025 00:07:58 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=postgresql.org; s=20171124; h=Content-Transfer-Encoding:Content-Type: Mime-Version:References:In-Reply-To:From:Subject:Cc:To:Message-Id:Date:Sender :Reply-To:Content-ID:Content-Description; bh=D1aErdXm8hoFt9ng59UsvlO/qd7qaG5vI03POM+bokc=; b=41cDSkTBOhxAvUiaQFuCjcxQzB 42eUeUW0cUaY0mHpJ3B4D/inx6gChDhVY+lDurpfq3Ac5DVX+FD+ClTO+Pwlzh1gpwBTEQkT/oZk/ YKCEydTyx7FK78OCtgfNvkT7S5YmHt634aEeHzury3e4hDcUC5sikHCJh4Ee48JGxUdHmI794Tqac +a3xWPV2ED7fp9fsiKn/DCC3siFMn6IxrqgcmPXnKcFk4/EwO0zTIVwPqkM3avp46KLry60bOrzWx jJCr6PnH4JnU8th3Jj9rKP9JO/PkChX6Tyl+3z+hNK1xhgXe666vx7u+JUqBU26lU63/QLUKXBkTr 55kWRGoA==; Received: from [2409:11:4120:300:b8b1:8745:da7d:a6d8] (helo=localhost) by meldrar.postgresql.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1v7N9G-0043OC-29; Sat, 11 Oct 2025 00:07:49 +0000 Date: Sat, 11 Oct 2025 09:07:31 +0900 (JST) Message-Id: <20251011.090731.1451293026979559494.ishii@postgresql.org> To: tgl@sss.pgh.pa.us Cc: pramsey@cleverelephant.ca, ojford@gmail.com, peter@eisentraut.org, li.evan.chao@gmail.com, krasiyan@gmail.com, vik@postgresfriends.org, andrew@tao11.riddles.org.uk, david@fetter.org, pgsql-hackers@lists.postgresql.org Subject: Re: Add RESPECT/IGNORE NULLS and FROM FIRST/LAST options From: Tatsuo Ishii In-Reply-To: <2952409.1760023154@sss.pgh.pa.us> References: <20251008.093117.1326499841464447981.ishii@postgresql.org> <2952409.1760023154@sss.pgh.pa.us> X-Mailer: Mew version 6.8 on Emacs 29.3 Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="--Next_Part(Sat_Oct_11_09_07_31_2025_548)--" Content-Transfer-Encoding: 7bit X-Host-Lookup-Failed: Reverse DNS lookup failed for 2409:11:4120:300:b8b1:8745:da7d:a6d8 (failed) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk ----Next_Part(Sat_Oct_11_09_07_31_2025_548)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit > While I'd paid basically zero attention to this patch (the claim > in the commit message that I reviewed it is a flight of fancy), Sorry, I added you as a reviewer because you had joined past discussions regarding this feature. Next time I will add reviewers only those who actually looked into a patch. > I've been forced to look through it as a consequence of the mop-up > that's been happening to silence compiler warnings. There are a > couple of points that I think were not well done: > > 1. WinCheckAndInitializeNullTreatment really needs a rethink. > You cannot realistically assume that existing user-defined window > functions will be fixed to call that. Currently if WinCheckAndInitializeNullTreatment is not called, RESPECT/IGNORE NULLS option is disregarded and WinGetFuncArgInFrame or WinGetFuncArgInPartition works as if RESPECT/IGNORE NULLS option is not given. So I thought it's safe even if existing user-defined window functions are not fixed. > I think it should be set up > so that if the window function fails to call that, then something in > mainline execution of nodeWindowAgg.c throws an error when there had > been a RESPECT/IGNORE NULLS option. With that idea, you could drop > the allowNullTreatment argument and just have the window functions > that support this syntax call something named along the lines of > WinAllowNullTreatmentOption. Does that mean all user defined window functions start to fail after upgrading to PostgreSQL 19? I am not sure if it's acceptable for extension developers and their users. > Also the error is certainly user-facing, > so using elog() was quite inappropriate. It should be ereport with an > errcode of (probably) ERRCODE_FEATURE_NOT_SUPPORTED. Rolling your > own implementation of get_func_name() wasn't great either. I overlooked the elog() call and "own implementation of get_func_name()". Will fix. > Alternatively, you could just drop the entire concept of throwing an > error for that. What's the point? If we do that, extensions would need to be re-tested against IGNORE NULLS option case. I might be wrong but I guess some of (or many of) extension developers do not plan (or have no time to work on it for now) to utilize IGNORE NULLS option for their extensions. For buil-in window functions. I don't want to create test cases how built-in window functions, that are not allowed IGNORE NULLS option, behave against IGNORE NULLS option. Instead I prefer to throw an error as it is done today. > The implementation is entirely > within nodeWindowAgg.c and does not depend in any way on the > cooperation of the window function. I do not in any case like the > documentation's wording > > + This option is only allowed for the following functions: lag, > + lead, first_value, last_value, > + nth_value. > as this fails to account for the possibility of user-defined window > functions. The page explains only built-in window functions. Thus for me it's not that strange that it does not say anything about user defined window functions. > IMO we could drop the error check altogether and rewrite > the docs along the lines of "Not all window functions pay attention > to this option. Of the built-in window functions, only blah blah > and blah do." > > 2. AFAICS there is only one notnull_info array, which amounts to > assuming that the window function will have only one argument position > that it calls WinGetFuncArgInFrame or WinGetFuncArgInPartition for. > That may be true for the built-in functions but it seems mighty > restrictive for extensions. Worse yet, there's no check, so that > you'd just get silently wrong answers if two or more arguments are > evaluated. I think there ought to be a separate array for each argno; > of course only created if the window function actually asks for > evaluations of a particular argno. I missed that. Thank you for pointed it out. I agree it would be better allow to use multiple argument positions that calls WinGetFuncArgInFrame or WinGetFuncArgInPartition in extensions. Attached is a PoC patch for that. Currently there's an issue with the patch, however. SELECT x, y, mywindowfunc2(x, y, 2) IGNORE NULLS OVER w FROM g WINDOW w AS (ORDER BY y); psql:test2.sql:9: ERROR: cannot fetch row before WindowObject's mark position mywindowfunc2 is a user defined window function, taking 3 arguments. x and y are expected to be evaluated to integer. The third argument is relative offset to current row. In the query above x and y are retrieved using two WinGetFuncArgInPartition() calls. The data set (table "g") looks like below. x | y ----+--- | 1 | 2 10 | 3 20 | 4 (4 rows) I think the cause of the error is: (1) WinGetFuncArgInPartition keep on fetching column x until it's evalued to not null and placed in the second row (in this case that's x==20). In WinGetFuncArgInPartition WinSetMarkPosition is called at abs_pos==3. (2) WinGetFuncArgInPartition tries to fetch column y at row 0. Since the mark was set to at row 3, the error occurred. To avoid the error, we could call WinGetFuncArgInPartition with set_mark = false (and call WinSetMarkPosition separately) but I am not sure if it's an acceptable solution. Best regards, -- Tatsuo Ishii SRA OSS K.K. English: http://www.sraoss.co.jp/index_en/ Japanese:http://www.sraoss.co.jp ----Next_Part(Sat_Oct_11_09_07_31_2025_548)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v1-0001-Allow-multiple-WinGetFuncArgInPartition-Frame-cal.patch" RnJvbSAxYTk2YjE5YjZmMTJjNWExOWJhMTFjOWQ0ZjVlYTgyZjA0NzMzZTM5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBGcmksIDEwIE9jdCAyMDI1IDIwOjUzOjE3ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MV0g QWxsb3cgbXVsdGlwbGUgV2luR2V0RnVuY0FyZ0luUGFydGl0aW9uL0ZyYW1lIGNhbGxzIHdpdGgK IElHTk9SRSBOVUxMUyBvcHRpb24uCgpQcmV2aW91c2x5IGl0IHdhcyBhc3N1bWVkIHRoYXQgdGhl cmUncyBvbmx5IG9uZSBjYWxsIHRvCldpbkdldEZ1bmNBcmdJblBhcnRpdGlvbi9GcmFtZSBpbiBh IHdpbmRvdyBmdW5jdGlvbiB3aGVuIElHTk9SRSBOVUxMUwpvcHRpb24gaXMgc3BlY2lmaWVkLiBU byBhbGxvdyBtdWx0aXBsZSBjYWxscyB0byB0aGVtLAp3aW5vYmotPm5vdG51bGxfaW5mbyBpcyBt b2RpZmllZCBmcm9tICJ1aW50OCAqIiB0byAidWludDggKioiIHNvIHRoYXQKd2lub2JqLT5ub3Ru dWxsX2luZm8gY291bGQgc3RvcmUgcG9pbnRlcnMgdG8gbm90IG51bGwgaW5mbyB0aGF0CmNvcnJl c3BvbmQgdG8gZWFjaCBmdW5jdGlvbiBhcmd1bWVudC4KLS0tCiBzcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlV2luZG93QWdnLmMgfCA2NyArKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCiAxIGZp bGUgY2hhbmdlZCwgNDIgaW5zZXJ0aW9ucygrKSwgMjUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZVdpbmRvd0FnZy5jCmluZGV4IGU2YTUzZjk1MzkxLi5jN2NiOTdhMDY0MyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jCisrKyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVXaW5kb3dBZ2cuYwpAQCAtNjksNyArNjksNyBAQCB0eXBlZGVm IHN0cnVjdCBXaW5kb3dPYmplY3REYXRhCiAJaW50CQkJcmVhZHB0cjsJCS8qIHR1cGxlc3RvcmUg cmVhZCBwb2ludGVyIGZvciB0aGlzIGZuICovCiAJaW50NjQJCW1hcmtwb3M7CQkvKiByb3cgdGhh dCBtYXJrcHRyIGlzIHBvc2l0aW9uZWQgb24gKi8KIAlpbnQ2NAkJc2Vla3BvczsJCS8qIHJvdyB0 aGF0IHJlYWRwdHIgaXMgcG9zaXRpb25lZCBvbiAqLwotCXVpbnQ4CSAgICpub3RudWxsX2luZm87 CS8qIG5vdCBudWxsIGluZm8gKi8KKwl1aW50OAkgICoqbm90bnVsbF9pbmZvOwkvKiBub3QgbnVs bCBpbmZvIGZvciBlYWNoIGZ1bmMgYXJncyAqLwogCWludAkJCW51bV9ub3RudWxsX2luZm87CS8q IHRyYWNrIHNpemUgb2YgdGhlIG5vdG51bGxfaW5mbyBhcnJheSAqLwogCiAJLyoKQEAgLTIxNCwx MCArMjE0LDEwIEBAIHN0YXRpYyBEYXR1bSBpZ25vcmVudWxsc19nZXRmdW5jYXJnaW5mcmFtZShX aW5kb3dPYmplY3Qgd2lub2JqLCBpbnQgYXJnbm8sCiBzdGF0aWMgRGF0dW0gZ2V0dHVwbGVfZXZh bF9wYXJ0aXRpb24oV2luZG93T2JqZWN0IHdpbm9iaiwgaW50IGFyZ25vLAogCQkJCQkJCQkJIGlu dDY0IGFic19wb3MsIGJvb2wgKmlzbnVsbCwKIAkJCQkJCQkJCSBib29sICppc291dCk7Ci1zdGF0 aWMgdm9pZCBpbml0X25vdG51bGxfaW5mbyhXaW5kb3dPYmplY3Qgd2lub2JqKTsKLXN0YXRpYyB2 b2lkIGdyb3dfbm90bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3aW5vYmosIGludDY0IHBvcyk7Ci1z dGF0aWMgdWludDggZ2V0X25vdG51bGxfaW5mbyhXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2NCBw b3MpOwotc3RhdGljIHZvaWQgcHV0X25vdG51bGxfaW5mbyhXaW5kb3dPYmplY3Qgd2lub2JqLCBp bnQ2NCBwb3MsIGJvb2wgaXNudWxsKTsKK3N0YXRpYyB2b2lkIGluaXRfbm90bnVsbF9pbmZvKFdp bmRvd09iamVjdCB3aW5vYmosIFdpbmRvd1N0YXRlUGVyRnVuYyBwZXJmdW5jc3RhdGUpOworc3Rh dGljIHZvaWQgZ3Jvd19ub3RudWxsX2luZm8oV2luZG93T2JqZWN0IHdpbm9iaiwgaW50NjQgcG9z LCBpbnQgYXJnbm8pOworc3RhdGljIHVpbnQ4IGdldF9ub3RudWxsX2luZm8oV2luZG93T2JqZWN0 IHdpbm9iaiwgaW50NjQgcG9zLCBpbnQgYXJnbm8pOworc3RhdGljIHZvaWQgcHV0X25vdG51bGxf aW5mbyhXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2NCBwb3MsIGludCBhcmdubywgYm9vbCBpc251 bGwpOwogCiAvKgogICogTm90IG51bGwgaW5mbyBiaXQgYXJyYXkgY29uc2lzdHMgb2YgMi1iaXQg aXRlbXMKQEAgLTEzMDQsOSArMTMwNCwxNCBAQCBiZWdpbl9wYXJ0aXRpb24oV2luZG93QWdnU3Rh dGUgKndpbnN0YXRlKQogCiAJCQkvKiByZXNldCBudWxsIG1hcCAqLwogCQkJaWYgKHdpbm9iai0+ aWdub3JlX251bGxzID09IElHTk9SRV9OVUxMUykKLQkJCQltZW1zZXQod2lub2JqLT5ub3RudWxs X2luZm8sIDAsCi0JCQkJCSAgIE5OX1BPU19UT19CWVRFUygKLQkJCQkJCQkJCSAgIHBlcmZ1bmNz dGF0ZS0+d2lub2JqLT5udW1fbm90bnVsbF9pbmZvKSk7CisJCQl7CisJCQkJaW50CQkJbnVtYXJn cyA9IHBlcmZ1bmNzdGF0ZS0+bnVtQXJndW1lbnRzOworCisJCQkJZm9yIChpbnQgaiA9IDA7IGog PCBudW1hcmdzOyBqKyspCisJCQkJCW1lbXNldCh3aW5vYmotPm5vdG51bGxfaW5mb1tqXSwgMCwK KwkJCQkJCSAgIE5OX1BPU19UT19CWVRFUygKKwkJCQkJCQkJCQkgICBwZXJmdW5jc3RhdGUtPndp bm9iai0+bnVtX25vdG51bGxfaW5mbykpOworCQkJfQogCQl9CiAJfQogCkBAIC0yNzM0LDcgKzI3 MzksNyBAQCBFeGVjSW5pdFdpbmRvd0FnZyhXaW5kb3dBZ2cgKm5vZGUsIEVTdGF0ZSAqZXN0YXRl LCBpbnQgZWZsYWdzKQogCQkJd2lub2JqLT5sb2NhbG1lbSA9IE5VTEw7CiAJCQlwZXJmdW5jc3Rh dGUtPndpbm9iaiA9IHdpbm9iajsKIAkJCXdpbm9iai0+aWdub3JlX251bGxzID0gd2Z1bmMtPmln bm9yZV9udWxsczsKLQkJCWluaXRfbm90bnVsbF9pbmZvKHdpbm9iaik7CisJCQlpbml0X25vdG51 bGxfaW5mbyh3aW5vYmosIHBlcmZ1bmNzdGF0ZSk7CiAKIAkJCS8qIEl0J3MgYSByZWFsIHdpbmRv dyBmdW5jdGlvbiwgc28gc2V0IHVwIHRvIGNhbGwgaXQuICovCiAJCQlmbWdyX2luZm9fY3h0KHdm dW5jLT53aW5mbm9pZCwgJnBlcmZ1bmNzdGF0ZS0+ZmxpbmZvLApAQCAtMzM4Niw3ICszMzkxLDcg QEAgaWdub3JlbnVsbHNfZ2V0ZnVuY2FyZ2luZnJhbWUoV2luZG93T2JqZWN0IHdpbm9iaiwgaW50 IGFyZ25vLAogCQlpZiAoaXNvdXQpCiAJCQkqaXNvdXQgPSBmYWxzZTsKIAotCQl2ID0gZ2V0X25v dG51bGxfaW5mbyh3aW5vYmosIGFic19wb3MpOworCQl2ID0gZ2V0X25vdG51bGxfaW5mbyh3aW5v YmosIGFic19wb3MsIGFyZ25vKTsKIAkJaWYgKHYgPT0gTk5fTlVMTCkJCS8qIHRoaXMgcm93IGlz IGtub3duIHRvIGJlIE5VTEwgKi8KIAkJCWdvdG8gYWR2YW5jZTsKIApAQCAtMzQwNCw3ICszNDA5 LDcgQEAgaWdub3JlbnVsbHNfZ2V0ZnVuY2FyZ2luZnJhbWUoV2luZG93T2JqZWN0IHdpbm9iaiwg aW50IGFyZ25vLAogCQkJCW5vdG51bGxfb2Zmc2V0Kys7CiAKIAkJCS8qIHJlY29yZCB0aGUgcm93 IHN0YXR1cyAqLwotCQkJcHV0X25vdG51bGxfaW5mbyh3aW5vYmosIGFic19wb3MsICppc251bGwp OworCQkJcHV0X25vdG51bGxfaW5mbyh3aW5vYmosIGFic19wb3MsIGFyZ25vLCAqaXNudWxsKTsK IAkJfQogCQllbHNlCQkJCQkvKiB0aGlzIHJvdyBpcyBrbm93biB0byBiZSBOT1QgTlVMTCAqLwog CQl7CkBAIC0zNDQ0LDE2ICszNDQ5LDIwIEBAIG91dF9vZl9mcmFtZToKICAqIEluaXRpYWxpemUg bm9uIG51bGwgbWFwLgogICovCiBzdGF0aWMgdm9pZAotaW5pdF9ub3RudWxsX2luZm8oV2luZG93 T2JqZWN0IHdpbm9iaikKK2luaXRfbm90bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3aW5vYmosIFdp bmRvd1N0YXRlUGVyRnVuYyBwZXJmdW5jc3RhdGUpCiB7CiAvKiBpbml0aWFsIG51bWJlciBvZiBu b3RudWxsIGluZm8gbWVtYmVycyAqLwogI2RlZmluZQlJTklUX05PVF9OVUxMX0lORk9fTlVNCTEy OAorCWludAkJCW51bWFyZ3MgPSBwZXJmdW5jc3RhdGUtPm51bUFyZ3VtZW50czsKIAogCWlmICh3 aW5vYmotPmlnbm9yZV9udWxscyA9PSBQQVJTRVJfSUdOT1JFX05VTExTKQogCXsKIAkJU2l6ZQkJ c2l6ZSA9IE5OX1BPU19UT19CWVRFUyhJTklUX05PVF9OVUxMX0lORk9fTlVNKTsKIAotCQl3aW5v YmotPm5vdG51bGxfaW5mbyA9IHBhbGxvYzAoc2l6ZSk7CisJCXdpbm9iai0+bm90bnVsbF9pbmZv ID0gcGFsbG9jKHNpemVvZih1aW50OCAqKSAqIG51bWFyZ3MpOworCQlmb3IgKGludCBpID0gMDsg aSA8IG51bWFyZ3M7IGkrKykKKwkJCS8qIGFsbG9jYXRlIG5vdG51bGxfaW5mbyBmb3IgZWFjaCBh cmd1bWVudCAqLworCQkJd2lub2JqLT5ub3RudWxsX2luZm9baV0gPSBwYWxsb2MwKHNpemUpOwog CQl3aW5vYmotPm51bV9ub3RudWxsX2luZm8gPSBJTklUX05PVF9OVUxMX0lORk9fTlVNOwogCX0K IH0KQEAgLTM0NjIsOSArMzQ3MSwxMCBAQCBpbml0X25vdG51bGxfaW5mbyhXaW5kb3dPYmplY3Qg d2lub2JqKQogICogZ3Jvd19ub3RudWxsX2luZm8KICAqIGV4cGFuZCBub3RudWxsX2luZm8gaWYg bmVjZXNzYXJ5LgogICogcG9zOiBub3QgbnVsbCBpbmZvIHBvc2l0aW9uCisgKiBhcmdubzogYXJn dW1lbnQgbnVtYmVyCiAqLwogc3RhdGljIHZvaWQKLWdyb3dfbm90bnVsbF9pbmZvKFdpbmRvd09i amVjdCB3aW5vYmosIGludDY0IHBvcykKK2dyb3dfbm90bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3 aW5vYmosIGludDY0IHBvcywgaW50IGFyZ25vKQogewogCWlmIChwb3MgPj0gd2lub2JqLT5udW1f bm90bnVsbF9pbmZvKQogCXsKQEAgLTM0NzMsOCArMzQ4Myw4IEBAIGdyb3dfbm90bnVsbF9pbmZv KFdpbmRvd09iamVjdCB3aW5vYmosIGludDY0IHBvcykKIAkJCVNpemUJCW9sZHNpemUgPSBOTl9Q T1NfVE9fQllURVMod2lub2JqLT5udW1fbm90bnVsbF9pbmZvKTsKIAkJCVNpemUJCW5ld3NpemUg PSBvbGRzaXplICogMjsKIAotCQkJd2lub2JqLT5ub3RudWxsX2luZm8gPQotCQkJCXJlcGFsbG9j MCh3aW5vYmotPm5vdG51bGxfaW5mbywgb2xkc2l6ZSwgbmV3c2l6ZSk7CisJCQl3aW5vYmotPm5v dG51bGxfaW5mb1thcmdub10gPQorCQkJCXJlcGFsbG9jMCh3aW5vYmotPm5vdG51bGxfaW5mb1th cmdub10sIG9sZHNpemUsIG5ld3NpemUpOwogCQkJd2lub2JqLT5udW1fbm90bnVsbF9pbmZvID0g Tk5fQllURVNfVE9fUE9TKG5ld3NpemUpOwogCQkJaWYgKHdpbm9iai0+bnVtX25vdG51bGxfaW5m byA+IHBvcykKIAkJCQlicmVhazsKQEAgLTM0ODYsMTYgKzM0OTYsMTkgQEAgZ3Jvd19ub3RudWxs X2luZm8oV2luZG93T2JqZWN0IHdpbm9iaiwgaW50NjQgcG9zKQogICogZ2V0X25vdG51bGxfaW5m bwogICogcmV0cmlldmUgYSBtYXAKICAqIHBvczogbWFwIHBvc2l0aW9uCisgKiBhcmdubzogYXJn dW1lbnQgbnVtYmVyCiAgKi8KIHN0YXRpYyB1aW50OAotZ2V0X25vdG51bGxfaW5mbyhXaW5kb3dP YmplY3Qgd2lub2JqLCBpbnQ2NCBwb3MpCitnZXRfbm90bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3 aW5vYmosIGludDY0IHBvcywgaW50IGFyZ25vKQogeworCXVpbnQ4CSAgICptYnA7CiAJdWludDgJ CW1iOwogCWludDY0CQlicG9zOwogCi0JZ3Jvd19ub3RudWxsX2luZm8od2lub2JqLCBwb3MpOwor CWdyb3dfbm90bnVsbF9pbmZvKHdpbm9iaiwgcG9zLCBhcmdubyk7CiAJYnBvcyA9IE5OX1BPU19U T19CWVRFUyhwb3MpOwotCW1iID0gd2lub2JqLT5ub3RudWxsX2luZm9bYnBvc107CisJbWJwID0g d2lub2JqLT5ub3RudWxsX2luZm9bYXJnbm9dOworCW1iID0gbWJwW2Jwb3NdOwogCXJldHVybiAo bWIgPj4gKE5OX1NISUZUKHBvcykpKSAmIE5OX01BU0s7CiB9CiAKQEAgLTM1MDMsMjIgKzM1MTYs MjYgQEAgZ2V0X25vdG51bGxfaW5mbyhXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2NCBwb3MpCiAg KiBwdXRfbm90bnVsbF9pbmZvCiAgKiB1cGRhdGUgbWFwCiAgKiBwb3M6IG1hcCBwb3NpdGlvbgor ICogYXJnbm86IGFyZ3VtZW50IG51bWJlcgorICogaXNudWxsOiBpbmRpY2F0ZSBOVUxMIG9yIE5P VAogICovCiBzdGF0aWMgdm9pZAotcHV0X25vdG51bGxfaW5mbyhXaW5kb3dPYmplY3Qgd2lub2Jq LCBpbnQ2NCBwb3MsIGJvb2wgaXNudWxsKQorcHV0X25vdG51bGxfaW5mbyhXaW5kb3dPYmplY3Qg d2lub2JqLCBpbnQ2NCBwb3MsIGludCBhcmdubywgYm9vbCBpc251bGwpCiB7CisJdWludDgJICAg Km1icDsKIAl1aW50OAkJbWI7CiAJaW50NjQJCWJwb3M7CiAJdWludDgJCXZhbCA9IGlzbnVsbCA/ IE5OX05VTEwgOiBOTl9OT1ROVUxMOwogCWludAkJCXNoaWZ0OwogCi0JZ3Jvd19ub3RudWxsX2lu Zm8od2lub2JqLCBwb3MpOworCWdyb3dfbm90bnVsbF9pbmZvKHdpbm9iaiwgcG9zLCBhcmdubyk7 CiAJYnBvcyA9IE5OX1BPU19UT19CWVRFUyhwb3MpOwotCW1iID0gd2lub2JqLT5ub3RudWxsX2lu Zm9bYnBvc107CisJbWJwID0gd2lub2JqLT5ub3RudWxsX2luZm9bYXJnbm9dOworCW1iID0gbWJw W2Jwb3NdOwogCXNoaWZ0ID0gTk5fU0hJRlQocG9zKTsKIAltYiAmPSB+KE5OX01BU0sgPDwgc2hp ZnQpOwkvKiBjbGVhciBtYXAgKi8KIAltYiB8PSAodmFsIDw8IHNoaWZ0KTsJCS8qIHVwZGF0ZSBt YXAgKi8KLQl3aW5vYmotPm5vdG51bGxfaW5mb1ticG9zXSA9IG1iOworCW1icFticG9zXSA9IG1i OwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKQEAgLTM3ODcsNyArMzgwNCw3IEBAIFdpbkdldEZ1bmNB cmdJblBhcnRpdGlvbihXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQgYXJnbm8sCiAJCQlicmVhazsK IAogCQkvKiBjaGVjayBOT1QgTlVMTCBjYWNoZWQgaW5mbyAqLwotCQlubl9pbmZvID0gZ2V0X25v dG51bGxfaW5mbyh3aW5vYmosIGFic19wb3MpOworCQlubl9pbmZvID0gZ2V0X25vdG51bGxfaW5m byh3aW5vYmosIGFic19wb3MsIGFyZ25vKTsKIAkJaWYgKG5uX2luZm8gPT0gTk5fTk9UTlVMTCkJ LyogdGhpcyByb3cgaXMga25vd24gdG8gYmUgTk9UIE5VTEwgKi8KIAkJCW5vdG51bGxfb2Zmc2V0 Kys7CiAJCWVsc2UgaWYgKG5uX2luZm8gPT0gTk5fTlVMTCkJLyogdGhpcyByb3cgaXMga25vd24g dG8gYmUgTlVMTCAqLwpAQCAtMzgwMiw3ICszODE5LDcgQEAgV2luR2V0RnVuY0FyZ0luUGFydGl0 aW9uKFdpbmRvd09iamVjdCB3aW5vYmosIGludCBhcmdubywKIAkJCWlmICghKmlzbnVsbCkKIAkJ CQlub3RudWxsX29mZnNldCsrOwogCQkJLyogcmVjb3JkIHRoZSByb3cgc3RhdHVzICovCi0JCQlw dXRfbm90bnVsbF9pbmZvKHdpbm9iaiwgYWJzX3BvcywgKmlzbnVsbCk7CisJCQlwdXRfbm90bnVs bF9pbmZvKHdpbm9iaiwgYWJzX3BvcywgYXJnbm8sICppc251bGwpOwogCQl9CiAJfSB3aGlsZSAo bm90bnVsbF9vZmZzZXQgPCBub3RudWxsX3JlbHBvcyk7CiAKLS0gCjIuNDMuMAoK ----Next_Part(Sat_Oct_11_09_07_31_2025_548)----