mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Added some protection to Period handling in the data dictionary when invalid period expressions are passed i.e. empty strings or non-numeric strings
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@16355 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -29,6 +29,8 @@ import java.util.Date;
|
||||
|
||||
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
/**
|
||||
* Support for calendar based periods
|
||||
@@ -37,7 +39,9 @@ import org.alfresco.service.namespace.QName;
|
||||
*/
|
||||
public abstract class AbstractCalendarPeriodProvider extends AbstractPeriodProvider
|
||||
{
|
||||
|
||||
/** Logger */
|
||||
private static Log logger = LogFactory.getLog(AbstractCalendarPeriodProvider.class);
|
||||
|
||||
public String getDefaultExpression()
|
||||
{
|
||||
return "1";
|
||||
@@ -50,7 +54,19 @@ public abstract class AbstractCalendarPeriodProvider extends AbstractPeriodProvi
|
||||
|
||||
public Date getNextDate(Date date, String expression)
|
||||
{
|
||||
int value = Integer.parseInt(expression);
|
||||
int value = 1;
|
||||
try
|
||||
{
|
||||
value = Integer.parseInt(expression);
|
||||
}
|
||||
catch (NumberFormatException nfe)
|
||||
{
|
||||
// default to 1 and log warning
|
||||
value = 1;
|
||||
|
||||
if (logger.isWarnEnabled())
|
||||
logger.warn("\"" + expression + "\" is not a valid period expression!");
|
||||
}
|
||||
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(date);
|
||||
|
@@ -882,4 +882,19 @@ public class PeriodTest extends TestCase
|
||||
assertEquals("2011-12-07T13:37:33.104", df.format(period.getNextDate(date)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test a missing expression, ensure 1 is used as the default
|
||||
*/
|
||||
public void testMissingExpression()
|
||||
{
|
||||
assertTrue(Period.getProviderNames().contains(Days.PERIOD_TYPE));
|
||||
Date now = new Date();
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
|
||||
Period period = new Period(Days.PERIOD_TYPE + "|");
|
||||
assertNotNull(period.getNextDate(now));
|
||||
calendar.setTime(now);
|
||||
calendar.add(Calendar.DAY_OF_YEAR, 1);
|
||||
assertEquals(period.getNextDate(now), calendar.getTime());
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user