- /* Not well formed -- kill everything */
- free( psz_html_start );
- psz_html_start = NULL;
- }
- else if( psz_html_start )
- {
- /* Shrink the memory requirements */
- psz_html_start = realloc( psz_html_start, psz_html - psz_html_start + 1 );
+ static const char *psz_text_close = "</text>";
+ static const char *psz_tag_long = "/font>";
+
+ /* Realloc for closing tags and shrink memory */
+ const size_t i_length = (size_t)( psz_html - psz_html_start );
+
+ const size_t i_size = i_length + strlen(psz_tag_long) * strlen(psz_tag) + strlen(psz_text_close) + 1;
+ char *psz_new = realloc( psz_html_start, i_size );
+ if( psz_new )
+ {
+ psz_html_start = psz_new;
+ psz_html = &psz_new[i_length];
+
+ /* Close not well formed subtitle */
+ while( *psz_tag )
+ {
+ /* */
+ char *psz_last = &psz_tag[strlen(psz_tag)-1];
+ switch( *psz_last )
+ {
+ case 'b':
+ HtmlPut( &psz_html, "</b>" );
+ break;
+ case 'i':
+ HtmlPut( &psz_html, "</i>" );
+ break;
+ case 'u':
+ HtmlPut( &psz_html, "</u>" );
+ break;
+ case 'f':
+ HtmlPut( &psz_html, "/font>" );
+ break;
+ case 'I':
+ break;
+ }
+
+ *psz_last = '\0';
+ }
+ HtmlPut( &psz_html, psz_text_close );
+ }