long year;
unsigned int mon :4; /* 1 <= mon <= 12 */
unsigned int day :5; /* 1 <= day <= 31 */
- unsigned int hour :5; /* 0 <= hour <= 24 */
+ unsigned int hour :5; /* 0 <= hour <= 23 */
unsigned int min :6; /* 0 <= min <= 59 */
double sec;
unsigned int tz_flag :1; /* is tzo explicitely set? */
}
ret->type = XML_SCHEMA_FACET_MINLENGTH;
ret->val = xmlSchemaNewValue(XML_SCHEMAS_NNINTEGER);
- if (ret->val == NULL) {
- xmlFree(ret);
- return(NULL);
- }
ret->val->value.decimal.lo = value;
return (ret);
}
#define VALID_DATE(dt) \
(VALID_YEAR(dt->year) && VALID_MONTH(dt->mon) && VALID_MDAY(dt))
-#define VALID_END_OF_DAY(dt) \
- ((dt)->hour == 24 && (dt)->min == 0 && (dt)->sec == 0)
-
#define VALID_TIME(dt) \
- (((VALID_HOUR(dt->hour) && VALID_MIN(dt->min) && \
- VALID_SEC(dt->sec)) || VALID_END_OF_DAY(dt)) && \
- VALID_TZO(dt->tzo))
+ (VALID_HOUR(dt->hour) && VALID_MIN(dt->min) && \
+ VALID_SEC(dt->sec) && VALID_TZO(dt->tzo))
#define VALID_DATETIME(dt) \
(VALID_DATE(dt) && VALID_TIME(dt))
return ret;
if (*cur != ':')
return 1;
- if (!VALID_HOUR(value) && value != 24 /* Allow end-of-day hour */)
+ if (!VALID_HOUR(value))
return 2;
cur++;
if (ret != 0)
return ret;
- if (!VALID_TIME(dt))
+ if ((!VALID_SEC(dt->sec)) || (!VALID_TZO(dt->tzo)))
return 2;
*str = cur;
* Coverity detected an overrun in daysInMonth
* of size 12 at position 12 with index variable "((r)->mon - 1)"
*/
- if (tmon < 1)
- tmon = 1;
+ if (tmon < 0)
+ tmon = 0;
if (tmon > 12)
tmon = 12;
tempdays += MAX_DAYINMONTH(tyr, tmon);
carry = -1;
- } else if (VALID_YEAR(r->year) && VALID_MONTH(r->mon) &&
- tempdays > (long) MAX_DAYINMONTH(r->year, r->mon)) {
+ } else if (tempdays > (long) MAX_DAYINMONTH(r->year, r->mon)) {
tempdays = tempdays - MAX_DAYINMONTH(r->year, r->mon);
carry = 1;
} else
if (y->type == XML_SCHEMAS_STRING)
yws = XML_SCHEMA_WHITESPACE_PRESERVE;
- else if (y->type == XML_SCHEMAS_NORMSTRING)
+ else if (x->type == XML_SCHEMAS_NORMSTRING)
yws = XML_SCHEMA_WHITESPACE_REPLACE;
else
yws = XML_SCHEMA_WHITESPACE_COLLAPSE;
xmlSchemaWhitespaceValueType ws)
{
int ret;
- int stringType;
if (facet == NULL)
return(-1);
*/
if (value == NULL)
return(-1);
- /*
- * If string-derived type, regexp must be tested on the value space of
- * the datatype.
- * See https://www.w3.org/TR/xmlschema-2/#rf-pattern
- */
- stringType = val && ((val->type >= XML_SCHEMAS_STRING && val->type <= XML_SCHEMAS_NORMSTRING)
- || (val->type >= XML_SCHEMAS_TOKEN && val->type <= XML_SCHEMAS_NCNAME));
- ret = xmlRegexpExec(facet->regexp,
- (stringType && val->value.str) ? val->value.str : value);
+ ret = xmlRegexpExec(facet->regexp, value);
if (ret == 1)
return(0);
if (ret == 0)
* @val: the precomputed value
* @retValue: the returned value
*
- * Get the canonical lexical representation of the value.
+ * Get a the cononical lexical representation of the value.
* The caller has to FREE the returned retValue.
*
* WARNING: Some value types are not supported yet, resulting
* @retValue: the returned value
* @ws: the whitespace type of the value
*
- * Get the canonical representation of the value.
+ * Get a the cononical representation of the value.
* The caller has to free the returned @retValue.
*
* Returns 0 if the value could be built, 1 if the value type is