Fix invalid memory access in weather plugin.
authorAndriy Grytsenko <andrej@rep.kiev.ua>
Sat, 12 Nov 2016 00:18:22 +0000 (02:18 +0200)
committerAndriy Grytsenko <andrej@rep.kiev.ua>
Sat, 12 Nov 2016 00:18:22 +0000 (02:18 +0200)
ChangeLog
plugins/weather/weatherwidget.c
plugins/weather/yahooutil.c

index 4b26c56..f89b923 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -61,6 +61,7 @@
     smaller, it's why this feature was made configurable, corresponding
     config variable is UseSmallerIcons and default is 1 (old behavior).
 * Changed volume slider popup behavior - it now hides when loses focus.
+* Fixed invalid memory access in weather plugin.
 
 0.8.2
 -------------------------------------------------------------------------
index 3205bdd..c2d4763 100644 (file)
@@ -371,6 +371,7 @@ gtk_weather_destroy(GObject * object)
   if (priv->forecast_data.timerid > 0)
     {
       g_source_remove(priv->forecast_data.timerid);
+      priv->forecast_data.timerid = 0;
     }
   
   /* Need to free location and forecast. */
@@ -378,28 +379,9 @@ gtk_weather_destroy(GObject * object)
   freeLocation(priv->location);
   freeForecast(priv->forecast);
 
-#ifdef USE_STANDALONE
-  if (priv->menu_data.menu && GTK_IS_WIDGET(priv->menu_data.menu))
-    {
-      gtk_widget_destroy(priv->menu_data.menu);
-    }
-#endif
-
-  if (priv->hbox && GTK_IS_WIDGET(priv->hbox))
-    {
-      gtk_widget_destroy(priv->hbox);
-    }
-
-  if (priv->image && GTK_IS_WIDGET(priv->image))
-    {
-      gtk_widget_destroy(priv->image);
-    }
-
-  if (priv->label && GTK_IS_WIDGET(priv->label))
-    {
-      gtk_widget_destroy(priv->label);
-    }
-  
+  priv->previous_location = NULL;
+  priv->location = NULL;
+  priv->forecast = NULL;
 }
 
 /**
@@ -688,12 +670,12 @@ gtk_weather_set_forecast(GtkWeather * weather, gpointer forecast)
   printForecast(priv->forecast);
   printForecast(forecast);
 #endif
-  
-  if (!forecast)
+
+  if (priv->forecast && priv->forecast != forecast)
     {
       freeForecast(priv->forecast);
 
-      priv->forecast = NULL;
+      priv->forecast = forecast;
     }
 
   gtk_weather_render(weather);
index 8c0f821..b7c31b5 100644 (file)
@@ -1004,7 +1004,7 @@ getForecastInfo(const gchar * pczWOEID, const gchar czUnits, gpointer * pForecas
 
   gsize len = getForecastQueryLength(pczWOEID);
 
-  gchar * cQueryBuffer = g_malloc0(len);
+  gchar * cQueryBuffer = g_malloc(len + 1);
 
   gint iRet = getForecastQuery(cQueryBuffer, pczWOEID, czUnits);