Skip to content

Commit 0daf2c8

Browse files
committed
Merge remote-tracking branch 'upstream/master' into array_function_stubs
2 parents 56476a6 + 5b8e12a commit 0daf2c8

33 files changed

+913
-478
lines changed

Zend/tests/bug77922.phpt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
--TEST--
2+
Bug #77922: Double release of doc comment on inherited shadow property
3+
--FILE--
4+
<?php
5+
6+
class A {
7+
/** Foo */
8+
private $prop;
9+
}
10+
11+
class B extends A {
12+
}
13+
14+
class C extends B {
15+
}
16+
17+
?>
18+
===DONE===
19+
--EXPECT--
20+
===DONE===

Zend/zend_virtual_cwd.c

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ static cwd_state main_cwd_state; /* True global */
9393
#include <unistd.h>
9494
#else
9595
#include <direct.h>
96+
#include "zend_globals.h"
97+
#include "zend_globals_macros.h"
9698
#endif
9799

98100
#define CWD_STATE_COPY(d, s) \
@@ -608,6 +610,7 @@ static size_t tsrm_realpath_r(char *path, size_t start, size_t len, int *ll, tim
608610
tmp = do_alloca(len+1, use_heap);
609611
memcpy(tmp, path, len+1);
610612

613+
retry:
611614
if(save &&
612615
!(IS_UNC_PATH(path, len) && len >= 3 && path[2] != '?') &&
613616
(dataw.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)
@@ -655,7 +658,21 @@ static size_t tsrm_realpath_r(char *path, size_t start, size_t len, int *ll, tim
655658
return (size_t)-1;
656659
}
657660
if(!DeviceIoControl(hLink, FSCTL_GET_REPARSE_POINT, NULL, 0, pbuffer, MAXIMUM_REPARSE_DATA_BUFFER_SIZE, &retlength, NULL)) {
661+
BY_HANDLE_FILE_INFORMATION fileInformation;
662+
658663
free_alloca(pbuffer, use_heap_large);
664+
if ((dataw.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) &&
665+
(dataw.dwReserved0 & ~IO_REPARSE_TAG_CLOUD_MASK) == IO_REPARSE_TAG_CLOUD &&
666+
EG(windows_version_info).dwMajorVersion >= 10 &&
667+
EG(windows_version_info).dwMinorVersion == 0 &&
668+
EG(windows_version_info).dwBuildNumber >= 18362 &&
669+
GetFileInformationByHandle(hLink, &fileInformation) &&
670+
!(fileInformation.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)) {
671+
dataw.dwFileAttributes = fileInformation.dwFileAttributes;
672+
CloseHandle(hLink);
673+
(*ll)--;
674+
goto retry;
675+
}
659676
free_alloca(tmp, use_heap);
660677
CloseHandle(hLink);
661678
FREE_PATHW()
@@ -735,8 +752,7 @@ static size_t tsrm_realpath_r(char *path, size_t start, size_t len, int *ll, tim
735752
}
736753
else if (pbuffer->ReparseTag == IO_REPARSE_TAG_DEDUP ||
737754
/* Starting with 1709. */
738-
(pbuffer->ReparseTag & IO_REPARSE_TAG_CLOUD_MASK) != 0 && 0x90001018L != pbuffer->ReparseTag ||
739-
IO_REPARSE_TAG_CLOUD == pbuffer->ReparseTag ||
755+
(pbuffer->ReparseTag & ~IO_REPARSE_TAG_CLOUD_MASK) == IO_REPARSE_TAG_CLOUD ||
740756
IO_REPARSE_TAG_ONEDRIVE == pbuffer->ReparseTag) {
741757
isabsolute = 1;
742758
substitutename = malloc((len + 1) * sizeof(char));

ext/calendar/calendar.c

Lines changed: 15 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
#include "php.h"
2727
#include "ext/standard/info.h"
28+
#include "calendar_arginfo.h"
2829
#include "php_calendar.h"
2930
#include "sdncal.h"
3031

@@ -36,100 +37,6 @@
3637
#undef CAL_GREGORIAN
3738
#endif
3839

39-
/* {{{ arginfo */
40-
ZEND_BEGIN_ARG_INFO_EX(arginfo_unixtojd, 0, 0, 0)
41-
ZEND_ARG_INFO(0, timestamp)
42-
ZEND_END_ARG_INFO()
43-
44-
ZEND_BEGIN_ARG_INFO(arginfo_jdtounix, 0)
45-
ZEND_ARG_INFO(0, jday)
46-
ZEND_END_ARG_INFO()
47-
48-
ZEND_BEGIN_ARG_INFO_EX(arginfo_cal_info, 0, 0, 0)
49-
ZEND_ARG_INFO(0, calendar)
50-
ZEND_END_ARG_INFO()
51-
52-
ZEND_BEGIN_ARG_INFO(arginfo_cal_days_in_month, 0)
53-
ZEND_ARG_INFO(0, calendar)
54-
ZEND_ARG_INFO(0, month)
55-
ZEND_ARG_INFO(0, year)
56-
ZEND_END_ARG_INFO()
57-
58-
ZEND_BEGIN_ARG_INFO(arginfo_cal_to_jd, 0)
59-
ZEND_ARG_INFO(0, calendar)
60-
ZEND_ARG_INFO(0, month)
61-
ZEND_ARG_INFO(0, day)
62-
ZEND_ARG_INFO(0, year)
63-
ZEND_END_ARG_INFO()
64-
65-
ZEND_BEGIN_ARG_INFO(arginfo_cal_from_jd, 0)
66-
ZEND_ARG_INFO(0, jd)
67-
ZEND_ARG_INFO(0, calendar)
68-
ZEND_END_ARG_INFO()
69-
70-
ZEND_BEGIN_ARG_INFO(arginfo_jdtogregorian, 0)
71-
ZEND_ARG_INFO(0, juliandaycount)
72-
ZEND_END_ARG_INFO()
73-
74-
ZEND_BEGIN_ARG_INFO(arginfo_gregoriantojd, 0)
75-
ZEND_ARG_INFO(0, month)
76-
ZEND_ARG_INFO(0, day)
77-
ZEND_ARG_INFO(0, year)
78-
ZEND_END_ARG_INFO()
79-
80-
ZEND_BEGIN_ARG_INFO(arginfo_jdtojulian, 0)
81-
ZEND_ARG_INFO(0, juliandaycount)
82-
ZEND_END_ARG_INFO()
83-
84-
ZEND_BEGIN_ARG_INFO(arginfo_juliantojd, 0)
85-
ZEND_ARG_INFO(0, month)
86-
ZEND_ARG_INFO(0, day)
87-
ZEND_ARG_INFO(0, year)
88-
ZEND_END_ARG_INFO()
89-
90-
ZEND_BEGIN_ARG_INFO_EX(arginfo_jdtojewish, 0, 0, 1)
91-
ZEND_ARG_INFO(0, juliandaycount)
92-
ZEND_ARG_INFO(0, hebrew)
93-
ZEND_ARG_INFO(0, fl)
94-
ZEND_END_ARG_INFO()
95-
96-
ZEND_BEGIN_ARG_INFO(arginfo_jewishtojd, 0)
97-
ZEND_ARG_INFO(0, month)
98-
ZEND_ARG_INFO(0, day)
99-
ZEND_ARG_INFO(0, year)
100-
ZEND_END_ARG_INFO()
101-
102-
ZEND_BEGIN_ARG_INFO(arginfo_jdtofrench, 0)
103-
ZEND_ARG_INFO(0, juliandaycount)
104-
ZEND_END_ARG_INFO()
105-
106-
ZEND_BEGIN_ARG_INFO(arginfo_frenchtojd, 0)
107-
ZEND_ARG_INFO(0, month)
108-
ZEND_ARG_INFO(0, day)
109-
ZEND_ARG_INFO(0, year)
110-
ZEND_END_ARG_INFO()
111-
112-
ZEND_BEGIN_ARG_INFO_EX(arginfo_jddayofweek, 0, 0, 1)
113-
ZEND_ARG_INFO(0, juliandaycount)
114-
ZEND_ARG_INFO(0, mode)
115-
ZEND_END_ARG_INFO()
116-
117-
ZEND_BEGIN_ARG_INFO(arginfo_jdmonthname, 0)
118-
ZEND_ARG_INFO(0, juliandaycount)
119-
ZEND_ARG_INFO(0, mode)
120-
ZEND_END_ARG_INFO()
121-
122-
ZEND_BEGIN_ARG_INFO_EX(arginfo_easter_date, 0, 0, 0)
123-
ZEND_ARG_INFO(0, year)
124-
ZEND_END_ARG_INFO()
125-
126-
ZEND_BEGIN_ARG_INFO_EX(arginfo_easter_days, 0, 0, 0)
127-
ZEND_ARG_INFO(0, year)
128-
ZEND_ARG_INFO(0, method)
129-
ZEND_END_ARG_INFO()
130-
131-
/* }}} */
132-
13340
static const zend_function_entry calendar_functions[] = {
13441
PHP_FE(jdtogregorian, arginfo_jdtogregorian)
13542
PHP_FE(gregoriantojd, arginfo_gregoriantojd)
@@ -295,7 +202,7 @@ PHP_FUNCTION(cal_info)
295202

296203

297204
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &cal) == FAILURE) {
298-
RETURN_FALSE;
205+
return;
299206
}
300207

301208
if (cal == -1) {
@@ -331,7 +238,7 @@ PHP_FUNCTION(cal_days_in_month)
331238
zend_long sdn_start, sdn_next;
332239

333240
if (zend_parse_parameters(ZEND_NUM_ARGS(), "lll", &cal, &month, &year) == FAILURE) {
334-
RETURN_FALSE;
241+
return;
335242
}
336243

337244
if (cal < 0 || cal >= CAL_NUM_CALS) {
@@ -377,7 +284,7 @@ PHP_FUNCTION(cal_to_jd)
377284
zend_long cal, month, day, year;
378285

379286
if (zend_parse_parameters(ZEND_NUM_ARGS(), "llll", &cal, &month, &day, &year) != SUCCESS) {
380-
RETURN_FALSE;
287+
return;
381288
}
382289

383290
if (cal < 0 || cal >= CAL_NUM_CALS) {
@@ -398,7 +305,7 @@ PHP_FUNCTION(cal_from_jd)
398305
const struct cal_entry_t *calendar;
399306

400307
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ll", &jd, &cal) == FAILURE) {
401-
RETURN_FALSE;
308+
return;
402309
}
403310

404311
if (cal < 0 || cal >= CAL_NUM_CALS) {
@@ -449,7 +356,7 @@ PHP_FUNCTION(jdtogregorian)
449356
int year, month, day;
450357

451358
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &julday) == FAILURE) {
452-
RETURN_FALSE;
359+
return;
453360
}
454361

455362
SdnToGregorian(julday, &year, &month, &day);
@@ -465,7 +372,7 @@ PHP_FUNCTION(gregoriantojd)
465372
zend_long year, month, day;
466373

467374
if (zend_parse_parameters(ZEND_NUM_ARGS(), "lll", &month, &day, &year) == FAILURE) {
468-
RETURN_FALSE;
375+
return;
469376
}
470377

471378
RETURN_LONG(GregorianToSdn(year, month, day));
@@ -480,7 +387,7 @@ PHP_FUNCTION(jdtojulian)
480387
int year, month, day;
481388

482389
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &julday) == FAILURE) {
483-
RETURN_FALSE;
390+
return;
484391
}
485392

486393
SdnToJulian(julday, &year, &month, &day);
@@ -496,7 +403,7 @@ PHP_FUNCTION(juliantojd)
496403
zend_long year, month, day;
497404

498405
if (zend_parse_parameters(ZEND_NUM_ARGS(), "lll", &month, &day, &year) == FAILURE) {
499-
RETURN_FALSE;
406+
return;
500407
}
501408

502409
RETURN_LONG(JulianToSdn(year, month, day));
@@ -609,7 +516,7 @@ PHP_FUNCTION(jdtojewish)
609516
char *dayp, *yearp;
610517

611518
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l|bl", &julday, &heb, &fl) == FAILURE) {
612-
RETURN_FALSE;
519+
return;
613520
}
614521

615522
SdnToJewish(julday, &year, &month, &day);
@@ -640,7 +547,7 @@ PHP_FUNCTION(jewishtojd)
640547
zend_long year, month, day;
641548

642549
if (zend_parse_parameters(ZEND_NUM_ARGS(), "lll", &month, &day, &year) == FAILURE) {
643-
RETURN_FALSE;
550+
return;
644551
}
645552

646553
RETURN_LONG(JewishToSdn(year, month, day));
@@ -655,7 +562,7 @@ PHP_FUNCTION(jdtofrench)
655562
int year, month, day;
656563

657564
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &julday) == FAILURE) {
658-
RETURN_FALSE;
565+
return;
659566
}
660567

661568
SdnToFrench(julday, &year, &month, &day);
@@ -671,7 +578,7 @@ PHP_FUNCTION(frenchtojd)
671578
zend_long year, month, day;
672579

673580
if (zend_parse_parameters(ZEND_NUM_ARGS(), "lll", &month, &day, &year) == FAILURE) {
674-
RETURN_FALSE;
581+
return;
675582
}
676583

677584
RETURN_LONG(FrenchToSdn(year, month, day));
@@ -687,7 +594,7 @@ PHP_FUNCTION(jddayofweek)
687594
const char *daynamel, *daynames;
688595

689596
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l|l", &julday, &mode) == FAILURE) {
690-
RETURN_FALSE;
597+
return;
691598
}
692599

693600
day = DayOfWeek(julday);
@@ -718,7 +625,7 @@ PHP_FUNCTION(jdmonthname)
718625
int month, day, year;
719626

720627
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ll", &julday, &mode) == FAILURE) {
721-
RETURN_FALSE;
628+
return;
722629
}
723630

724631
switch (mode) {

ext/calendar/calendar.stub.php

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
3+
/** @return int|false */
4+
function cal_days_in_month(int $calendar, int $month, int $year) {}
5+
6+
/** @return array<string, array<int, string>&int&string>|false */
7+
function cal_from_jd(int $jd, int $calendar) {}
8+
9+
/** @return array|false */
10+
function cal_info(?int $calendar = UNKNOWN) {}
11+
12+
/** @return int|false */
13+
function cal_to_jd(int $calendar, int $month, int $day, int $year) {}
14+
15+
function easter_date(int $year = UNKNOWN, int $method = CAL_EASTER_DEFAULT): int {}
16+
17+
function easter_days(int $year = UNKNOWN, int $method = CAL_EASTER_DEFAULT): int {}
18+
19+
function frenchtojd(int $month, int $day, int $year): int {}
20+
21+
function gregoriantojd(int $month, int $day, int $year): int {}
22+
23+
/** @return int|string */
24+
function jddayofweek(int $juliandaycount, int $mode = CAL_DOW_DAYNO) {}
25+
26+
function jdmonthname(int $juliandaycount, int $mode): string {}
27+
28+
function jdtofrench(int $juliandaycount): string {}
29+
30+
function jdtogregorian(int $juliandaycount): string {}
31+
32+
/** @return string|false */
33+
function jdtojewish(int $juliandaycount, bool $hebrew = false, int $fl = 0) {}
34+
35+
function jdtojulian(int $juliandaycount): string {}
36+
37+
/** @return int|false */
38+
function jdtounix(int $jday) {}
39+
40+
function jewishtojd(int $month, int $day, int $year): int {}
41+
42+
function juliantojd(int $month, int $day, int $year): int {}
43+
44+
/** @return int|false */
45+
function unixtojd(int $timestamp = UNKNOWN) {}

0 commit comments

Comments
 (0)