Skip to content

Commit

Permalink
Merge pull request #1445 from sjinks/issue-406
Browse files Browse the repository at this point in the history
Make sure the string is not interned (#406)
  • Loading branch information
Phalcon committed Oct 28, 2013
2 parents e372a4d + 0796e77 commit abb8b03
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 76 deletions.
36 changes: 36 additions & 0 deletions ext/kernel/string.c
Original file line number Diff line number Diff line change
Expand Up @@ -1412,3 +1412,39 @@ const char* zend_new_interned_string(const char *arKey, int nKeyLength, int free
}

#endif

void phalcon_add_trailing_slash(zval** v)
{
PHALCON_ENSURE_IS_STRING(v);
if (Z_STRLEN_PP(v)) {
int len = Z_STRLEN_PP(v);
char *c = Z_STRVAL_PP(v);

#ifdef PHP_WIN32
if (c[len-1] != '/' && c[len-1] != '\\')
#else
if (c[len-1] != PHP_DIR_SEPARATOR)
#endif
{
SEPARATE_ZVAL(v);
c = Z_STRVAL_PP(v);

if (!IS_INTERNED(c)) {
c = erealloc(c, len+2);
}
else {
c = emalloc(len+2);
if (c != NULL) {
memcpy(c, Z_STRVAL_PP(v), Z_STRLEN_PP(v));
}
}

if (c != NULL) {
c[len] = PHP_DIR_SEPARATOR;
c[len+1] = 0;

ZVAL_STRINGL(*v, c, len+1, 0);
}
}
}
}
1 change: 1 addition & 0 deletions ext/kernel/string.h
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ void phalcon_htmlentities(zval *return_value, zval *string, zval *quoting, zval
void phalcon_strval(zval *return_value, zval *v);
void phalcon_date(zval *return_value, zval *format, zval *timestamp TSRMLS_DC);
void phalcon_addslashes(zval *return_value, zval *str TSRMLS_DC);
void phalcon_add_trailing_slash(zval** v);

#if PHP_VERSION_ID < 50400

Expand Down
80 changes: 4 additions & 76 deletions ext/mvc/view.c
Original file line number Diff line number Diff line change
Expand Up @@ -137,25 +137,7 @@ PHP_METHOD(Phalcon_Mvc_View, setViewsDir){
zval **views_dir;

phalcon_fetch_params_ex(1, 0, &views_dir);
PHALCON_ENSURE_IS_STRING(views_dir);
if (Z_STRLEN_PP(views_dir)) {
int len = Z_STRLEN_PP(views_dir);
char *c = Z_STRVAL_PP(views_dir);

if (c[len-1] != '/' && c[len-1] != '\\') {
SEPARATE_ZVAL(views_dir);
c = Z_STRVAL_PP(views_dir);

c = erealloc(c, len+2);
if (c != NULL) {
c[len] = PHP_DIR_SEPARATOR;
c[len+1] = 0;

ZVAL_STRINGL(*views_dir, c, len+1, 0);
}
}
}

phalcon_add_trailing_slash(views_dir);
phalcon_update_property_this(this_ptr, SL("_viewsDir"), *views_dir TSRMLS_CC);

RETURN_THISW();
Expand Down Expand Up @@ -187,25 +169,7 @@ PHP_METHOD(Phalcon_Mvc_View, setLayoutsDir){
zval **layouts_dir;

phalcon_fetch_params_ex(1, 0, &layouts_dir);
PHALCON_ENSURE_IS_STRING(layouts_dir);
if (Z_STRLEN_PP(layouts_dir)) {
int len = Z_STRLEN_PP(layouts_dir);
char *c = Z_STRVAL_PP(layouts_dir);

if (c[len-1] != '/' && c[len-1] != '\\') {
SEPARATE_ZVAL(layouts_dir);
c = Z_STRVAL_PP(layouts_dir);

c = erealloc(c, len+2);
if (c != NULL) {
c[len] = PHP_DIR_SEPARATOR;
c[len+1] = 0;

ZVAL_STRINGL(*layouts_dir, c, len+1, 0);
}
}
}

phalcon_add_trailing_slash(layouts_dir);
phalcon_update_property_this(this_ptr, SL("_layoutsDir"), *layouts_dir TSRMLS_CC);
RETURN_THISW();
}
Expand Down Expand Up @@ -236,25 +200,7 @@ PHP_METHOD(Phalcon_Mvc_View, setPartialsDir){
zval **partials_dir;

phalcon_fetch_params_ex(1, 0, &partials_dir);
PHALCON_ENSURE_IS_STRING(partials_dir);
if (Z_STRLEN_PP(partials_dir)) {
int len = Z_STRLEN_PP(partials_dir);
char *c = Z_STRVAL_PP(partials_dir);

if (c[len-1] != '/' && c[len-1] != '\\') {
SEPARATE_ZVAL(partials_dir);
c = Z_STRVAL_PP(partials_dir);

c = erealloc(c, len+2);
if (c != NULL) {
c[len] = PHP_DIR_SEPARATOR;
c[len+1] = 0;

ZVAL_STRINGL(*partials_dir, c, len+1, 0);
}
}
}

phalcon_add_trailing_slash(partials_dir);
phalcon_update_property_this(this_ptr, SL("_partialsDir"), *partials_dir TSRMLS_CC);
RETURN_THISW();
}
Expand Down Expand Up @@ -286,25 +232,7 @@ PHP_METHOD(Phalcon_Mvc_View, setBasePath){

phalcon_fetch_params_ex(1, 0, &base_path);

PHALCON_ENSURE_IS_STRING(base_path);
if (Z_STRLEN_PP(base_path)) {
int len = Z_STRLEN_PP(base_path);
char *c = Z_STRVAL_PP(base_path);

if (c[len-1] != '/' && c[len-1] != '\\') {
SEPARATE_ZVAL(base_path);
c = Z_STRVAL_PP(base_path);

c = erealloc(c, len+2);
if (c != NULL) {
c[len] = PHP_DIR_SEPARATOR;
c[len+1] = 0;

ZVAL_STRINGL(*base_path, c, len+1, 0);
}
}
}

phalcon_add_trailing_slash(base_path);
phalcon_update_property_this(this_ptr, SL("_basePath"), *base_path TSRMLS_CC);
RETURN_THISW();
}
Expand Down

0 comments on commit abb8b03

Please sign in to comment.