|  | @@ -15903,6 +15903,9 @@ mg_get_context_info_impl(const struct mg_context *ctx, char *buffer, int buflen)
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  	struct mg_memory_stat *ms = get_memory_stat((struct mg_context *)ctx);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	const char *eoobj = "}";
 | 
	
		
			
				|  |  | +	int reserved_len = (int)strlen(eoobj) + (int)strlen(eol);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	if ((buffer == NULL) || (buflen < 10)) {
 | 
	
		
			
				|  |  |  		buflen = 0;
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -15920,10 +15923,10 @@ mg_get_context_info_impl(const struct mg_context *ctx, char *buffer, int buflen)
 | 
	
		
			
				|  |  |  		            block,
 | 
	
		
			
				|  |  |  		            sizeof(block),
 | 
	
		
			
				|  |  |  		            "\"memory\" : {%s"
 | 
	
		
			
				|  |  | -		            "\"blocks\" : %i%s"
 | 
	
		
			
				|  |  | -		            "\"used\" : %" INT64_FMT "%s"
 | 
	
		
			
				|  |  | +		            "\"blocks\" : %i,%s"
 | 
	
		
			
				|  |  | +		            "\"used\" : %" INT64_FMT ",%s"
 | 
	
		
			
				|  |  |  		            "\"maxUsed\" : %" INT64_FMT "%s"
 | 
	
		
			
				|  |  | -		            "},%s",
 | 
	
		
			
				|  |  | +		            "}%s%s",
 | 
	
		
			
				|  |  |  		            eol,
 | 
	
		
			
				|  |  |  		            ms->blockCount,
 | 
	
		
			
				|  |  |  		            eol,
 | 
	
	
		
			
				|  | @@ -15931,10 +15934,11 @@ mg_get_context_info_impl(const struct mg_context *ctx, char *buffer, int buflen)
 | 
	
		
			
				|  |  |  		            eol,
 | 
	
		
			
				|  |  |  		            ms->maxMemUsed,
 | 
	
		
			
				|  |  |  		            eol,
 | 
	
		
			
				|  |  | +		            (ctx ? "," : ""),
 | 
	
		
			
				|  |  |  		            eol);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		context_info_length += (int)strlen(block);
 | 
	
		
			
				|  |  | -		if (context_info_length < buflen) {
 | 
	
		
			
				|  |  | +		if (context_info_length + reserved_len < buflen) {
 | 
	
		
			
				|  |  |  			strcat(buffer, block);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -15947,8 +15951,8 @@ mg_get_context_info_impl(const struct mg_context *ctx, char *buffer, int buflen)
 | 
	
		
			
				|  |  |  		            block,
 | 
	
		
			
				|  |  |  		            sizeof(block),
 | 
	
		
			
				|  |  |  		            "\"connections\" : {%s"
 | 
	
		
			
				|  |  | -		            "\"active\" : %i%s"
 | 
	
		
			
				|  |  | -		            "\"maxActive\" : %i%s"
 | 
	
		
			
				|  |  | +		            "\"active\" : %i,%s"
 | 
	
		
			
				|  |  | +		            "\"maxActive\" : %i,%s"
 | 
	
		
			
				|  |  |  		            "\"total\" : %" INT64_FMT "%s"
 | 
	
		
			
				|  |  |  		            "},%s",
 | 
	
		
			
				|  |  |  		            eol,
 | 
	
	
		
			
				|  | @@ -15961,7 +15965,7 @@ mg_get_context_info_impl(const struct mg_context *ctx, char *buffer, int buflen)
 | 
	
		
			
				|  |  |  		            eol);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		context_info_length += (int)strlen(block);
 | 
	
		
			
				|  |  | -		if (context_info_length < buflen) {
 | 
	
		
			
				|  |  | +		if (context_info_length + reserved_len < buflen) {
 | 
	
		
			
				|  |  |  			strcat(buffer, block);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -15974,22 +15978,23 @@ mg_get_context_info_impl(const struct mg_context *ctx, char *buffer, int buflen)
 | 
	
		
			
				|  |  |  		            sizeof(block),
 | 
	
		
			
				|  |  |  		            "\"requests\" : {%s"
 | 
	
		
			
				|  |  |  		            "\"total\" : %" INT64_FMT "%s"
 | 
	
		
			
				|  |  | -		            "},%s",
 | 
	
		
			
				|  |  | +		            "}%s",
 | 
	
		
			
				|  |  |  		            eol,
 | 
	
		
			
				|  |  |  		            ctx->total_requests,
 | 
	
		
			
				|  |  |  		            eol,
 | 
	
		
			
				|  |  |  		            eol);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		context_info_length += (int)strlen(block);
 | 
	
		
			
				|  |  | -		if (context_info_length < buflen) {
 | 
	
		
			
				|  |  | +		if (context_info_length + reserved_len < buflen) {
 | 
	
		
			
				|  |  |  			strcat(buffer, block);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if ((buflen > 0) && buffer && buffer[0]) {
 | 
	
		
			
				|  |  | -		char *p = strrchr(buffer, ',');
 | 
	
		
			
				|  |  | -		if (p) {
 | 
	
		
			
				|  |  | -			*p = '}';
 | 
	
		
			
				|  |  | +		if (context_info_length < buflen) {
 | 
	
		
			
				|  |  | +			strcat(buffer, eoobj);
 | 
	
		
			
				|  |  | +			strcat(buffer, eol);
 | 
	
		
			
				|  |  | +			context_info_length += reserved_len;
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 |