if ( !cp )
cp = (char *)malloc(flen + 1);
if ( cp ) {
- strncpy(cp, &rp[fldp->db_foffset], flen);
- cp[flen] = 0;
+ strlcpy(cp, &rp[fldp->db_foffset], flen + 1);
}
return cp;
}
return;
}
- if (qname_len == 0 || value_len == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attribute name and value are required");
+ if (qname_len == 0) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attribute name is required");
return;
}
sockets_functions,
PHP_MINIT(sockets),
NULL,
- PHP_RINIT(sockets),
+ NULL,
PHP_RSHUTDOWN(sockets),
PHP_MINFO(sockets),
NO_VERSION_YET,
}
/* }}} */
-/* {{{ PHP_RINIT_FUNCTION */
-PHP_RINIT_FUNCTION(sockets)
-{
- return SUCCESS;
-}
-/* }}} */
-
/* {{{ PHP_RSHUTDOWN_FUNCTION */
PHP_RSHUTDOWN_FUNCTION(sockets)
{
case SQLITE_ROW:
if (rowdata[0] != NULL) {
*vallen = strlen(rowdata[0]);
- *val = emalloc(*vallen);
- *vallen = sqlite_decode_binary(rowdata[0], *val);
- (*val)[*vallen] = '\0';
+ if (*vallen) {
+ *val = emalloc(*vallen);
+ *vallen = sqlite_decode_binary(rowdata[0], *val);
+ (*val)[*vallen] = '\0';
+ } else {
+ *val = STR_EMPTY_ALLOC();
+ }
}
break;
default:
PHPAPI void make_digest(char *md5str, unsigned char *digest)
{
+ make_digest_ex(md5str, digest, 16);
+}
+
+PHPAPI void make_digest_ex(char *md5str, unsigned char *digest, int len)
+{
+ static const char hexits[17] = "0123456789abcdef";
int i;
- for (i = 0; i < 16; i++) {
- sprintf(md5str, "%02x", digest[i]);
- md5str += 2;
+ for (i = 0; i < len; i++) {
+ md5str[i * 2] = hexits[digest[i] >> 4];
+ md5str[(i * 2) + 1] = hexits[digest[i] & 0x0F];
}
-
- *md5str = '\0';
+ md5str[len * 2] = '\0';
}
/* {{{ proto string md5(string str, [ bool raw_output]) U
if (raw_output) {
RETVAL_STRINGL((char*)digest, 16, 1);
} else {
- make_digest(md5str, digest);
+ make_digest_ex(md5str, digest. 16);
RETVAL_ASCII_STRING(md5str, ZSTR_DUPLICATE);
}
if (raw_output) {
RETURN_STRINGL((char*)digest, 16, 1);
} else {
- make_digest(md5str, digest);
+ make_digest_ex(md5str, digest, 16);
RETVAL_ASCII_STRING(md5str, ZSTR_DUPLICATE);
}
}
} PHP_MD5_CTX;
PHPAPI void make_digest(char *md5str, unsigned char *digest);
+PHPAPI void make_digest_ex(char *md5str, unsigned char *digest, int len);
PHPAPI void PHP_MD5Init(PHP_MD5_CTX *);
PHPAPI void PHP_MD5Update(PHP_MD5_CTX *, const unsigned char *, unsigned int);
PHPAPI void PHP_MD5Final(unsigned char[16], PHP_MD5_CTX *);
/* This code is heavily based on the PHP md5 implementation */
#include "sha1.h"
+#include "md5.h"
PHPAPI void make_sha1_digest(char *sha1str, unsigned char *digest)
{
- int i;
-
- for (i = 0; i < 20; i++) {
- sprintf(sha1str, "%02x", digest[i]);
- sha1str += 2;
- }
-
- *sha1str = '\0';
+ make_digest_ex(sha1str, digest, 20);
}
/* {{{ proto string sha1(string str [, bool raw_output]) U
if (raw_output) {
RETVAL_STRINGL((char*)digest, 20, 1);
} else {
- make_sha1_digest(sha1str, digest);
+ make_digest_ex(sha1str, digest, 20);
RETVAL_ASCII_STRING(sha1str, ZSTR_DUPLICATE);
}
if (raw_output) {
RETURN_STRINGL((char*)digest, 20, 1);
} else {
- make_sha1_digest(sha1str, digest);
+ make_digest_ex(sha1str, digest, 20);
RETVAL_ASCII_STRING(sha1str, ZSTR_DUPLICATE);
}
}