@@ -194,25 +194,25 @@ pcmk__digest_operation(const xmlNode *input)
194194 * \param[in] filter Whether to filter certain XML attributes
195195 *
196196 * \return Newly allocated string containing digest
197+ *
198+ * \note The caller is responsible for freeing the return value using
199+ * \c g_free().
197200 */
198- char *
201+ gchar *
199202pcmk__digest_xml (const xmlNode * xml , bool filter )
200203{
201204 /* @TODO Filtering accounts for significant CPU usage. Consider removing if
202205 * possible.
203206 */
204207 GString * buf = g_string_sized_new (1024 );
205- gchar * digest_g = NULL ;
206- char * digest = NULL ;
208+ gchar * digest = NULL ;
207209
208210 pcmk__xml_string (xml , (filter ? pcmk__xml_fmt_filtered : 0 ), buf , 0 );
209- digest_g = pcmk__md5sum (buf -> str );
210- if (digest_g == NULL ) {
211+ digest = pcmk__md5sum (buf -> str );
212+ if (digest == NULL ) {
211213 goto done ;
212214 }
213215
214- digest = pcmk__str_copy (digest_g );
215-
216216 pcmk__if_tracing (
217217 {
218218 char * trace_file = pcmk__assert_asprintf ("digest-%s" , digest );
@@ -230,7 +230,6 @@ pcmk__digest_xml(const xmlNode *xml, bool filter)
230230
231231done :
232232 g_string_free (buf , TRUE);
233- g_free (digest_g );
234233 return digest ;
235234}
236235
@@ -386,10 +385,11 @@ char *
386385calculate_xml_versioned_digest (xmlNode * input , gboolean sort ,
387386 gboolean do_filter , const char * version )
388387{
388+ gchar * digest_g = NULL ;
389+ char * digest = NULL ;
390+
389391 if ((version == NULL ) || (compare_version ("3.0.5" , version ) > 0 )) {
390392 xmlNode * sorted = NULL ;
391- gchar * digest_g = NULL ;
392- char * digest = NULL ;
393393
394394 if (sort ) {
395395 xmlNode * sorted = sorted_xml (input , NULL , true);
@@ -401,14 +401,16 @@ calculate_xml_versioned_digest(xmlNode *input, gboolean sort,
401401 pcmk__s (version , "unknown feature set" ));
402402
403403 digest_g = calculate_xml_digest_v1 (input );
404- digest = pcmk__str_copy (digest_g );
405-
406404 pcmk__xml_free (sorted );
407- g_free (digest_g );
408- return digest ;
405+
406+ } else {
407+ crm_trace ("Using v2 digest algorithm for %s" , version );
408+ digest_g = pcmk__digest_xml (input , do_filter );
409409 }
410- crm_trace ("Using v2 digest algorithm for %s" , version );
411- return pcmk__digest_xml (input , do_filter );
410+
411+ digest = pcmk__str_copy (digest_g );
412+ g_free (digest_g );
413+ return digest ;
412414}
413415
414416char *
0 commit comments