Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pcP9X-0006qV-4I for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Mar 2023 11:18:43 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pcP9U-0005SV-Sk for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Mar 2023 11:18:40 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pcP9U-0005SK-Ca for pgsql-hackers@lists.postgresql.org; Wed, 15 Mar 2023 11:18:40 +0000 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pcP9R-0004fE-27 for pgsql-hackers@postgresql.org; Wed, 15 Mar 2023 11:18:39 +0000 Received: by mail-pj1-x1029.google.com with SMTP id om3-20020a17090b3a8300b0023efab0e3bfso1336936pjb.3 for ; Wed, 15 Mar 2023 04:18:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678879116; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=jQZKfwmqdZJd5yZ7NjVQoD/pjhbdU39Xq8Ft1C7vRJM=; b=Kfx79n1vGsVadD32aBXB5iLcBnv9vMeWT6cji8xEUTjH3Pgk+kkNHjP1bvVbzaxNs0 DlvJJRG4Mn/8R5tE4IAFJnPPnd9TE2qrAnjlXXX9OKi/KtNXW/a2ZPFadQUkuHm5NVGC eVwuUTy7OVmPZeJYe1clHsV/yDnRs0Q+0eTebRkDSlSaJH7bpAo5NVErTfWhPkW7LAAK bpLhoiwaRcaDXnspDpRa/vKHAnjJM4OBOrcSVdL6AJog/pg+707u/TpsEBPuVpF0K2+p RHEp9FvuEiIQG5o6aeQcmUYJ5bULpGYTmFkULzV8pYXcx6Qc72qUfO4o0nMWRLfm4Kvz qPJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678879116; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=jQZKfwmqdZJd5yZ7NjVQoD/pjhbdU39Xq8Ft1C7vRJM=; b=xIhKuI2Hcn5fk6itDzvaXY/6/0pvPtCvUkdXdPDy3PX1qVVdEq0hlzI8awFnQ4b5jS kasKNe8rbf2zcEgPqzEUXe9OvFzxd5yUCHy3ZpL8Sl4VwmWYCarx3tovbClXO3UMSTk+ LQZiQAnBg6+upkoEXsMy6PiVmjcC8pXrbEmD5nJaUFBSuRzTn73s+BxghgMepfdvWHfG 9LdRLo4q+uqGFu2XRECygbw8P+ITm/9V77bDn5a+q94BR3LrO4JaMJBIw4lITT1aSEr8 mgtiVskWaPbTDaybP90Ahn/ed1Gj9yJe1fpCN8BmhJ55Gn8xbvo1DtGpyuUGTBIRhtXK v0dA== X-Gm-Message-State: AO0yUKWtpyGfghUAAsD0m17yV85UD/aupylSBkfWY6G8hm4jGQxOrY/i lpmoNkGqwCgfU6HOgyDdCCSlW8pxSh+xkcNe/N8= X-Google-Smtp-Source: AK7set9YhgPV+p9g5VI5cl4axk4XEuOYaOpdnneMMVwBk8P9dvVZAOBzp2av52nlR6mrhL5u7Htih4wZhlRaccB2elU= X-Received: by 2002:a17:903:4289:b0:1a0:561c:7276 with SMTP id ju9-20020a170903428900b001a0561c7276mr1027238plb.1.1678879115760; Wed, 15 Mar 2023 04:18:35 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: =?UTF-8?Q?Juan_Jos=C3=A9_Santamar=C3=ADa_Flecha?= Date: Wed, 15 Mar 2023 12:18:25 +0100 Message-ID: Subject: Re: Fix fseek() detection of unseekable files on WIN32 To: Michael Paquier Cc: Pg Hackers Content-Type: multipart/mixed; boundary="0000000000005120ee05f6ee81e3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005120ee05f6ee81e3 Content-Type: multipart/alternative; boundary="0000000000005120ec05f6ee81e1" --0000000000005120ec05f6ee81e1 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Mar 15, 2023 at 5:57=E2=80=AFAM Michael Paquier wrote: > On Tue, Mar 14, 2023 at 01:26:27PM +0100, Juan Jos=C3=A9 Santamar=C3=ADa = Flecha > wrote: > > As highlighted in [1] fseek() might fail to error even when accessing > > unseekable streams. > > > > PFA a patch that checks the file type before the actual fseek(), so onl= y > > supported calls are made. > > + * streams, so harden that funcion with our version. > s/funcion/function/. > Done. +extern int pgfseek64(FILE *stream, pgoff_t offset, int origin); > +extern pgoff_t pgftell64(FILE *stream); > +#define fseeko(stream, offset, origin) pgfseek64(stream, offset, origin) > +#define ftello(stream) pgftell64(stream) > > What about naming the internal wrappers _pgfseeko64() and > _pgftello64(), located in a new file named win32fseek.c? It may be > possible that we would need a similar treatment for fseek(), in the > future, though I don't see an issue why this would be needed now. > Done. > + if (GetFileType((HANDLE) _get_osfhandle(_fileno(stream))) !=3D > FILE_TYPE_DISK) > + { > + errno =3D ESPIPE; > + return -1; > + } > Shouldn't there be cases where we should return EINVAL for some of the > other types, like FILE_TYPE_REMOTE or FILE_TYPE_UNKNOWN? We should > return ESPIPE only for FILE_TYPE_PIPE and FILE_TYPE_CHAR, then? > Done. PFA a new version of the patch. Regards, Juan Jos=C3=A9 Santamar=C3=ADa Flecha --0000000000005120ec05f6ee81e1 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

On Wed, Mar 15, 2023 at 5:57=E2=80=AFAM M= ichael Paquier <michael@paquier.x= yz> wrote:
+extern int=C2=A0= =C2=A0 =C2=A0pgfseek64(FILE *stream, pgoff_t offset, int origin);
+extern pgoff_t pgftell64(FILE *stream);
+#define fseeko(stream, offset, origin) pgfseek64(stream, offset, origin) +#define ftello(stream) pgftell64(stream)

What about naming the internal wrappers _pgfseeko64() and
_pgftello64(), located in a new file named win32fseek.c?=C2=A0 It may be possible that we would need a similar treatment for fseek(), in the
future, though I don't see an issue why this would be needed now.

Done.
=C2=A0
+=C2=A0 =C2=A0if (GetFileType((HANDLE) _g= et_osfhandle(_fileno(stream))) !=3D FILE_TYPE_DISK)
+=C2=A0 =C2=A0{
+=C2=A0 =C2=A0 =C2=A0 =C2=A0errno =3D ESPIPE;
+=C2=A0 =C2=A0 =C2=A0 =C2=A0return -1;
+=C2=A0 =C2=A0}
Shouldn't there be cases where we should return EINVAL for some of the<= br> other types, like FILE_TYPE_REMOTE or FILE_TYPE_UNKNOWN?=C2=A0 We should return ESPIPE only for FILE_TYPE_PIPE and FILE_TYPE_CHAR, then?

Done.

PFA a new version o= f the patch.

Regards,

Jua= n Jos=C3=A9 Santamar=C3=ADa Flecha
--0000000000005120ec05f6ee81e1-- --0000000000005120ee05f6ee81e3 Content-Type: application/octet-stream; name="v2-0001-fix-fseek-detection-of-unseekable-files-for-WIN32.patch" Content-Disposition: attachment; filename="v2-0001-fix-fseek-detection-of-unseekable-files-for-WIN32.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lf9l98yu0 RnJvbSA0NWVhMzMzOGUxMGM2YjI5NmRkYzFjZWRiODBjZThlNWYxMDNlNTFkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKdWFuIEpvc2UgU2FudGFtYXJpYSBGbGVjaGEgPGp1YW5qby5z YW50YW1hcmlhQGdtYWlsLmNvbT4KRGF0ZTogV2VkLCAxNSBNYXIgMjAyMyAwNzowNDo0NCAtMDQw MApTdWJqZWN0OiBbUEFUQ0hdIGZpeCBmc2VlayBkZXRlY3Rpb24gb2YgdW5zZWVrYWJsZSBmaWxl cyBmb3IgV0lOMzIKCkNhbGxpbmcgZnNlZWsoKSBvbiBhIGhhbmRsZSB0byBhIG5vbi1zZWVraW5n IGRldmljZSBzdWNoIGFzIGEgcGlwZSBvcgphIGNvbW11bmljYXRpb25zIGRldmljZSBpcyBub3Qg c3VwcG9ydGVkLCBldmVuIHRob3VnaCB0aGUgZnNlZWsoKSBtYXkKbm90IHJldHVybiBhbiBlcnJv ciwgc28gaGFyZGVuIHRoYXQgZnVuY2lvbiB3aXRoIG91ciB2ZXJzaW9uLgotLS0KIHNyYy9pbmNs dWRlL3BvcnQvd2luMzJfcG9ydC5oIHwgIDkgKysrKy0tCiBzcmMvcG9ydC9tZXNvbi5idWlsZCAg ICAgICAgICB8ICAxICsKIHNyYy9wb3J0L3dpbjMyZnNlZWsuYyAgICAgICAgIHwgNjggKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rvb2xzL21zdmMvTWt2 Y2J1aWxkLnBtICAgfCAgMSArCiA0IGZpbGVzIGNoYW5nZWQsIDc2IGluc2VydGlvbnMoKyksIDMg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3BvcnQvd2luMzJmc2Vlay5jCgpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9ydC93aW4zMl9wb3J0LmggYi9zcmMvaW5jbHVkZS9w b3J0L3dpbjMyX3BvcnQuaAppbmRleCA5NDg4MTk1Li42NjU1M2ZlIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9wb3J0L3dpbjMyX3BvcnQuaAorKysgYi9zcmMvaW5jbHVkZS9wb3J0L3dpbjMyX3Bv cnQuaApAQCAtMjA2LDEzICsyMDYsMTYgQEAgaW50CQkJc2V0aXRpbWVyKGludCB3aGljaCwgY29u c3Qgc3RydWN0IGl0aW1lcnZhbCAqdmFsdWUsIHN0cnVjdCBpdGltZXJ2YWwgKm92YWwKIAogLyoK ICAqIFdJTjMyIGRvZXMgbm90IHByb3ZpZGUgNjQtYml0IG9mZl90LCBidXQgZG9lcyBwcm92aWRl IHRoZSBmdW5jdGlvbnMgb3BlcmF0aW5nCi0gKiB3aXRoIDY0LWJpdCBvZmZzZXRzLgorICogd2l0 aCA2NC1iaXQgb2Zmc2V0cy4gQWxzbywgZnNlZWsoKSBtaWdodCBub3QgZ2l2ZSBhbiBlcnJvciBm b3IgdW5zZWVrYWJsZQorICogc3RyZWFtcywgc28gaGFyZGVuIHRoYXQgZnVuY3Rpb24gd2l0aCBv dXIgdmVyc2lvbi4KICAqLwogI2RlZmluZSBwZ29mZl90IF9faW50NjQKIAogI2lmZGVmIF9NU0Nf VkVSCi0jZGVmaW5lIGZzZWVrbyhzdHJlYW0sIG9mZnNldCwgb3JpZ2luKSBfZnNlZWtpNjQoc3Ry ZWFtLCBvZmZzZXQsIG9yaWdpbikKLSNkZWZpbmUgZnRlbGxvKHN0cmVhbSkgX2Z0ZWxsaTY0KHN0 cmVhbSkKK2V4dGVybiBpbnQgIAlfcGdmc2Vla282NChGSUxFICpzdHJlYW0sIHBnb2ZmX3Qgb2Zm c2V0LCBpbnQgb3JpZ2luKTsKK2V4dGVybiBwZ29mZl90CV9wZ2Z0ZWxsbzY0KEZJTEUgKnN0cmVh bSk7CisjZGVmaW5lIGZzZWVrbyhzdHJlYW0sIG9mZnNldCwgb3JpZ2luKSBfcGdmc2Vla282NChz dHJlYW0sIG9mZnNldCwgb3JpZ2luKQorI2RlZmluZSBmdGVsbG8oc3RyZWFtKSBfcGdmdGVsbG82 NChzdHJlYW0pCiAjZWxzZQogI2lmbmRlZiBmc2Vla28KICNkZWZpbmUgZnNlZWtvKHN0cmVhbSwg b2Zmc2V0LCBvcmlnaW4pIGZzZWVrbzY0KHN0cmVhbSwgb2Zmc2V0LCBvcmlnaW4pCmRpZmYgLS1n aXQgYS9zcmMvcG9ydC9tZXNvbi5idWlsZCBiL3NyYy9wb3J0L21lc29uLmJ1aWxkCmluZGV4IGIx NzRiMjUuLjNkOGVlYjQgMTAwNjQ0Ci0tLSBhL3NyYy9wb3J0L21lc29uLmJ1aWxkCisrKyBiL3Ny Yy9wb3J0L21lc29uLmJ1aWxkCkBAIC0zMyw2ICszMyw3IEBAIGlmIGhvc3Rfc3lzdGVtID09ICd3 aW5kb3dzJwogICAgICd3aW4zMmVudi5jJywKICAgICAnd2luMzJlcnJvci5jJywKICAgICAnd2lu MzJmZGF0YXN5bmMuYycsCisgICAgJ3dpbjMyZnNlZWsuYycsCiAgICAgJ3dpbjMyZ2V0cnVzYWdl LmMnLAogICAgICd3aW4zMmxpbmsuYycsCiAgICAgJ3dpbjMybnRkbGwuYycsCmRpZmYgLS1naXQg YS9zcmMvcG9ydC93aW4zMmZzZWVrLmMgYi9zcmMvcG9ydC93aW4zMmZzZWVrLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNmNjJkYgotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9wb3J0L3dpbjMyZnNlZWsuYwpAQCAtMCwwICsxLDY4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiB3aW4zMmZzZWVrLmMKKyAqCSAgUmVwbGFjZW1lbnRzIGZvciBmc2Vla28oKSBhbmQg ZnRlbGxvKCkuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjMsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04KKyAq CSAgc3JjL3BvcnQvd2luMzJmc2Vlay5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwor I2lmZGVmIEZST05URU5ECisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKyNlbHNlCisjaW5jbHVk ZSAicG9zdGdyZXMuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChXSU4zMikgJiYgZGVmaW5lZChf TVNDX1ZFUikKKworLyoKKyAqIF9wZ2ZzZWVrbzY0CisgKgorICogQ2FsbGluZyBmc2VlaygpIG9u IGEgaGFuZGxlIHRvIGEgbm9uLXNlZWtpbmcgZGV2aWNlIHN1Y2ggYXMgYSBwaXBlIG9yCisgKiBh IGNvbW11bmljYXRpb25zIGRldmljZSBpcyBub3Qgc3VwcG9ydGVkLCBldmVuIHRob3VnaCB0aGUg ZnNlZWsoKSBtYXkKKyAqIG5vdCByZXR1cm4gYW4gZXJyb3IuCisgKi8KK2ludAorX3BnZnNlZWtv NjQoRklMRSAqc3RyZWFtLCBwZ29mZl90IG9mZnNldCwgaW50IG9yaWdpbikKK3sKKwlEV09SRAkJ CWZpbGVUeXBlOworCisJZmlsZVR5cGUgPSBHZXRGaWxlVHlwZSgoSEFORExFKSBfZ2V0X29zZmhh bmRsZShfZmlsZW5vKHN0cmVhbSkpKTsKKworCWlmIChmaWxlVHlwZSA9PSBGSUxFX1RZUEVfRElT SykKKwkJcmV0dXJuIF9mc2Vla2k2NChzdHJlYW0sIG9mZnNldCwgb3JpZ2luKTsKKwllbHNlIGlm IChmaWxlVHlwZSA9PSBGSUxFX1RZUEVfQ0hBUiB8fCBmaWxlVHlwZSA9PSBGSUxFX1RZUEVfUElQ RSkKKwkJZXJybm8gPSBFU1BJUEU7CisJZWxzZQorCQllcnJubyA9IEVJTlZBTDsKKworCXJldHVy biAtMTsKK30KKworLyoKKyAqIF9wZ2Z0ZWxsbzY0CisgKgorICogU2FtZSBhcyBfcGdmc2Vla282 NCgpLgorICovCitwZ29mZl90CitfcGdmdGVsbG82NChGSUxFICpzdHJlYW0pCit7CisJRFdPUkQJ CQlmaWxlVHlwZTsKKworCWZpbGVUeXBlID0gR2V0RmlsZVR5cGUoKEhBTkRMRSkgX2dldF9vc2Zo YW5kbGUoX2ZpbGVubyhzdHJlYW0pKSk7CisKKwlpZiAoZmlsZVR5cGUgPT0gRklMRV9UWVBFX0RJ U0spCisJCXJldHVybiBfZnRlbGxpNjQoc3RyZWFtKTsKKwllbHNlIGlmIChmaWxlVHlwZSA9PSBG SUxFX1RZUEVfQ0hBUiB8fCBmaWxlVHlwZSA9PSBGSUxFX1RZUEVfUElQRSkKKwkJZXJybm8gPSBF U1BJUEU7CisJZWxzZQorCQllcnJubyA9IEVJTlZBTDsKKworCXJldHVybiAtMTsKK30KKworI2Vu ZGlmCQkJCQkJCS8qIGRlZmluZWQoV0lOMzIpICYmIGRlZmluZWQoX01TQ19WRVIpICovCmRpZmYg LS1naXQgYS9zcmMvdG9vbHMvbXN2Yy9Na3ZjYnVpbGQucG0gYi9zcmMvdG9vbHMvbXN2Yy9Na3Zj YnVpbGQucG0KaW5kZXggZjFjOWRkZi4uNjFhY2U1NyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL21z dmMvTWt2Y2J1aWxkLnBtCisrKyBiL3NyYy90b29scy9tc3ZjL01rdmNidWlsZC5wbQpAQCAtMTEx LDYgKzExMSw3IEBAIHN1YiBta3ZjYnVpbGQKIAkgIHdpbjMyZGxvcGVuLmMKIAkgIHdpbjMyZW52 LmMgd2luMzJlcnJvci5jCiAJICB3aW4zMmZkYXRhc3luYy5jCisJICB3aW4zMmZzZWVrLmMKIAkg IHdpbjMyZ2V0cnVzYWdlLmMKIAkgIHdpbjMyZ2V0dGltZW9mZGF5LmMKIAkgIHdpbjMybGluay5j Ci0tIAoyLjExLjAKCg== --0000000000005120ee05f6ee81e3--