Skip to content

Commit 19daef5

Browse files
authored
Harden ChartServlet against NPEs when no 'period' parameter is given (#1992)
Signed-off-by: Christoph Weitkamp <[email protected]>
1 parent 0af7440 commit 19daef5

File tree

1 file changed

+15
-9
lines changed
  • bundles/org.openhab.core.ui/src/main/java/org/openhab/core/ui/internal/chart

1 file changed

+15
-9
lines changed

bundles/org.openhab.core.ui/src/main/java/org/openhab/core/ui/internal/chart/ChartServlet.java

+15-9
Original file line numberDiff line numberDiff line change
@@ -213,37 +213,42 @@ protected void doGet(HttpServletRequest req, HttpServletResponse res) throws Ser
213213
}
214214
}
215215

216+
String periodParam = req.getParameter("period");
217+
String timeBeginParam = req.getParameter("begin");
218+
String timeEndParam = req.getParameter("end");
216219
// To avoid ambiguity you are not allowed to specify period, begin and end time at the same time.
217-
if (req.getParameter("period") != null && req.getParameter("begin") != null
218-
&& req.getParameter("end") != null) {
220+
if (periodParam != null && timeBeginParam != null && timeEndParam != null) {
219221
res.sendError(HttpServletResponse.SC_BAD_REQUEST,
220222
"Do not specify the three parameters period, begin and end at the same time.");
221223
return;
222224
}
223225

224226
// Read out the parameter period, begin and end and save them.
227+
Long period = null;
225228
Date timeBegin = null;
226229
Date timeEnd = null;
227230

228-
Long period = PERIODS.get(req.getParameter("period"));
231+
if (periodParam != null) {
232+
period = PERIODS.get(periodParam);
233+
}
229234
if (period == null) {
230235
// use a day as the default period
231236
period = PERIODS.get("D");
232237
}
233238

234-
if (req.getParameter("begin") != null) {
239+
if (timeBeginParam != null) {
235240
try {
236-
timeBegin = new SimpleDateFormat(DATE_FORMAT).parse(req.getParameter("begin"));
241+
timeBegin = new SimpleDateFormat(DATE_FORMAT).parse(timeBeginParam);
237242
} catch (ParseException e) {
238243
res.sendError(HttpServletResponse.SC_BAD_REQUEST,
239244
"Begin and end must have this format: " + DATE_FORMAT + ".");
240245
return;
241246
}
242247
}
243248

244-
if (req.getParameter("end") != null) {
249+
if (timeEndParam != null) {
245250
try {
246-
timeEnd = new SimpleDateFormat(DATE_FORMAT).parse(req.getParameter("end"));
251+
timeEnd = new SimpleDateFormat(DATE_FORMAT).parse(timeEndParam);
247252
} catch (ParseException e) {
248253
res.sendError(HttpServletResponse.SC_BAD_REQUEST,
249254
"Begin and end must have this format: " + DATE_FORMAT + ".");
@@ -292,9 +297,10 @@ protected void doGet(HttpServletRequest req, HttpServletResponse res) throws Ser
292297
}
293298

294299
// Read out parameter 'legend'
300+
String legendParam = req.getParameter("legend");
295301
Boolean legend = null;
296-
if (req.getParameter("legend") != null) {
297-
legend = Boolean.valueOf(req.getParameter("legend"));
302+
if (legendParam != null) {
303+
legend = Boolean.valueOf(legendParam);
298304
}
299305

300306
if (maxWidth > 0 && width > maxWidth) {

0 commit comments

Comments
 (0)