cvs: php4 /ext/standard file.c

From: Date: Tue, 06 Mar 2001 04:34:06 +0000
Subject: cvs: php4 /ext/standard file.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-4401@lists.php.net to get a copy of this message
elixer Mon Mar 5 20:34:06 2001 EDT Modified files: /php4/ext/standard file.c Log: get_meta_tags now allows attributes that are not quoted as well as those that are. It follows the HTML 4.01 specification for attribute values outlined here -> http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.2 Index: php4/ext/standard/file.c diff -u php4/ext/standard/file.c:1.145 php4/ext/standard/file.c:1.146 --- php4/ext/standard/file.c:1.145 Sun Mar 4 16:20:41 2001 +++ php4/ext/standard/file.c Mon Mar 5 20:34:05 2001 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: file.c,v 1.145 2001/03/05 00:20:41 elixer Exp $ */ +/* $Id: file.c,v 1.146 2001/03/06 04:34:05 elixer Exp $ */ /* Synced with php 3.0 revision 1.218 1999-06-16 [ssb] */ @@ -253,6 +253,9 @@ } /* }}} */ + +#define PHP_META_UNSAFE ".\\+*?[^]$() " + /* {{{ proto array get_meta_tags(string filename [, int use_include_path]) Extracts all meta tag content attributes from a file and returns an array */ @@ -319,6 +322,31 @@ /* We are done here! */ done = 1; } + } else if (tok_last == TOK_EQUAL && looking_for_val) { + + if (!num_parts) { + /* This is a single word attribute */ + temp = name = estrndup(token_data,token_len); + + while (temp && *temp) { + if (strchr(PHP_META_UNSAFE, *temp)) { + *temp = '_'; + } + temp++; + } + num_parts++; + } else { + if (PG(magic_quotes_runtime)) { + value = php_addslashes(token_data,0,&token_len,0); + } else { + value = estrndup(token_data,token_len); + } + + /* Insert the value into the array */ + add_assoc_string(return_value, name, value, 0); + num_parts = 0; + } + looking_for_val = 0; } else { if (in_meta_tag) { if (strcasecmp("name",token_data) == 0 || strcasecmp("content",token_data) == 0) { @@ -333,7 +361,7 @@ /* First, get the name value and store it */ temp = name = estrndup(token_data,token_len); while (temp && *temp) { - if (strchr(".\\+*?[^]$() ",*temp)) { + if (strchr(PHP_META_UNSAFE, *temp)) { *temp = '_'; } temp++; @@ -2096,6 +2124,9 @@ return len; } +/* See http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.2 */ +#define PHP_META_HTML402_CHARS "-_.:" + /* Tokenizes an HTML file for get_meta_tags */ php_meta_tags_token php_next_meta_token(FILE *fp, int socketd, int issock, int *use_last_char, int *last_char, char **data, int *datalen) { int ch, compliment; @@ -2150,10 +2181,13 @@ return TOK_SPACE; break; default: - if (isalpha(ch)) { + if (isalnum(ch)) { *datalen = 0; buff[(*datalen)++] = ch; - while (!FP_FEOF(socketd,fp,issock) && (ch = FP_FGETC(socketd,fp,issock)) && (isalpha(ch) || ch == '-')) { + while (!FP_FEOF(socketd,fp,issock) && + (ch = FP_FGETC(socketd,fp,issock)) && + (isalnum(ch) || strchr(PHP_META_HTML402_CHARS,ch))) { + buff[(*datalen)++] = ch; if (*datalen == META_DEF_BUFSIZE) @@ -2186,3 +2220,5 @@ * c-basic-offset: 4 * End: */ + +

« previous php.cvs (#4401) next »