Skip to content

Commit 53aaab8

Browse files
authored
Replaced problematic strlen if possible (#1226)
1 parent 61f3403 commit 53aaab8

File tree

5 files changed

+22
-10
lines changed

5 files changed

+22
-10
lines changed

azure-pipelines.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ jobs:
8484
sudo update-alternatives --set php-cgi /usr/bin/php-cgi$(phpver)
8585
sudo update-alternatives --set phar.phar /usr/bin/phar.phar$(phpver)
8686
sudo update-alternatives --set php-config /usr/bin/php-config$(phpver)
87+
sudo phpdismod xdebug
8788
php -version
8889
displayName: 'Use PHP version $(phpver)'
8990

source/pdo_sqlsrv/pdo_init.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -279,15 +279,15 @@ namespace {
279279
zend_class_entry* zend_class = php_pdo_get_dbh_ce();
280280

281281
SQLSRV_ASSERT( zend_class != NULL, "REGISTER_PDO_SQLSRV_CLASS_CONST_LONG: php_pdo_get_dbh_ce failed");
282-
zend_declare_class_constant_long(zend_class, const_cast<char*>(name), strlen(name), value);
282+
zend_declare_class_constant_long(zend_class, const_cast<char*>(name), strnlen_s(name), value);
283283
}
284284

285285
void REGISTER_PDO_SQLSRV_CLASS_CONST_STRING( _In_z_ char const* name, _In_z_ char const* value )
286286
{
287287
zend_class_entry* zend_class = php_pdo_get_dbh_ce();
288288

289289
SQLSRV_ASSERT( zend_class != NULL, "REGISTER_PDO_SQLSRV_CLASS_CONST_STRING: php_pdo_get_dbh_ce failed");
290-
zend_declare_class_constant_string(zend_class, const_cast<char*>(name), strlen(name), const_cast<char*>(value));
290+
zend_declare_class_constant_string(zend_class, const_cast<char*>(name), strnlen_s(name), const_cast<char*>(value));
291291
}
292292

293293
// array of pdo constants.

source/pdo_sqlsrv/pdo_util.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ char EXCEPTION_PROPERTY_ERRORINFO[] = "errorInfo";
3737
const int MAX_DIGITS = 11; // +-2 billion = 10 digits + 1 for the sign if negative
3838

3939
// the warning message is not the error message alone; it must take WARNING_TEMPLATE above into consideration without the formats
40-
const int WARNING_MIN_LENGTH = static_cast<const int>( strlen( WARNING_TEMPLATE ) - strlen( "%1!s!%2!d!%3!s!" ));
40+
const int WARNING_MIN_LENGTH = static_cast<const int>( strnlen_s( WARNING_TEMPLATE ) - strnlen_s( "%1!s!%2!d!%3!s!" ));
4141

4242
// Returns a sqlsrv_error for a given error code.
4343
sqlsrv_error_const* get_error_message( _In_opt_ unsigned int sqlsrv_error_code);

source/shared/core_stmt.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2356,7 +2356,7 @@ void format_decimal_numbers(_In_ SQLSMALLINT decimals_places, _In_ SQLSMALLINT f
23562356

23572357
char buffer[50] = " "; // A buffer with two blank spaces, as leeway
23582358
int offset = 1 + is_negative;
2359-
int src_length = strlen(src);
2359+
int src_length = strnlen_s(src);
23602360

23612361
if (add_leading_zero) {
23622362
buffer[offset++] = '0';
@@ -3054,7 +3054,7 @@ void adjustDecimalPrecision(_Inout_ zval* param_z, _In_ SQLSMALLINT decimal_digi
30543054
return; // decimal point not found
30553055
}
30563056

3057-
int src_length = strlen(src);
3057+
int src_length = strnlen_s(src);
30583058
int num_decimals = src_length - (pt - src) - 1;
30593059
if (num_decimals <= decimal_digits) {
30603060
return; // no need to adjust number of decimals
@@ -3151,7 +3151,7 @@ void adjustDecimalPrecision(_Inout_ zval* param_z, _In_ SQLSMALLINT decimal_digi
31513151
buffer[0] = '-';
31523152
}
31533153

3154-
zend_string* zstr = zend_string_init(buffer, strlen(buffer), 0);
3154+
zend_string* zstr = zend_string_init(buffer, strnlen_s(buffer), 0);
31553155
zend_string_release(Z_STR_P(param_z));
31563156
ZVAL_NEW_STR(param_z, zstr);
31573157
}

source/shared/localizationimpl.cpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -667,16 +667,22 @@ size_t SystemLocale::Utf8To16Strict( const char *src, SSIZE_T cchSrc, WCHAR *des
667667

668668
size_t SystemLocale::ToUtf16( UINT srcCodePage, const char * src, SSIZE_T cchSrc, WCHAR * dest, size_t cchDest, DWORD * pErrorCode )
669669
{
670+
if (cchSrc < 0) {
671+
if (NULL != pErrorCode)
672+
*pErrorCode = ERROR_INVALID_PARAMETER;
673+
return 0;
674+
}
675+
670676
srcCodePage = ExpandSpecialCP( srcCodePage );
671677
if ( dest )
672678
{
673679
if ( srcCodePage == CP_UTF8 )
674680
{
675-
return SystemLocale::Utf8To16( src, cchSrc < 0 ? (1+strlen(src)) : cchSrc, dest, cchDest, pErrorCode );
681+
return SystemLocale::Utf8To16( src, cchSrc, dest, cchDest, pErrorCode );
676682
}
677683
else if ( srcCodePage == 1252 )
678684
{
679-
return SystemLocale::CP1252ToUtf16( src, cchSrc < 0 ? (1+strlen(src)) : cchSrc, dest, cchDest, pErrorCode );
685+
return SystemLocale::CP1252ToUtf16( src, cchSrc, dest, cchDest, pErrorCode );
680686
}
681687
}
682688
EncodingConverter cvt( CP_UTF16, srcCodePage );
@@ -693,16 +699,21 @@ size_t SystemLocale::ToUtf16( UINT srcCodePage, const char * src, SSIZE_T cchSrc
693699

694700
size_t SystemLocale::ToUtf16Strict( UINT srcCodePage, const char * src, SSIZE_T cchSrc, WCHAR * dest, size_t cchDest, DWORD * pErrorCode )
695701
{
702+
if (cchSrc < 0) {
703+
if (NULL != pErrorCode)
704+
*pErrorCode = ERROR_INVALID_PARAMETER;
705+
return 0;
706+
}
696707
srcCodePage = ExpandSpecialCP( srcCodePage );
697708
if ( dest )
698709
{
699710
if ( srcCodePage == CP_UTF8 )
700711
{
701-
return SystemLocale::Utf8To16Strict( src, cchSrc < 0 ? (1+strlen(src)) : cchSrc, dest, cchDest, pErrorCode );
712+
return SystemLocale::Utf8To16Strict( src, cchSrc, dest, cchDest, pErrorCode );
702713
}
703714
else if ( srcCodePage == 1252 )
704715
{
705-
return SystemLocale::CP1252ToUtf16( src, cchSrc < 0 ? (1+strlen(src)) : cchSrc, dest, cchDest, pErrorCode );
716+
return SystemLocale::CP1252ToUtf16( src, cchSrc, dest, cchDest, pErrorCode );
706717
}
707718
}
708719
EncodingConverter cvt( CP_UTF16, srcCodePage );

0 commit comments

Comments
 (0)