@@ -326,10 +326,10 @@ static zlog_bool zlog_stream_buf_alloc_ex(struct zlog_stream *stream, size_t nee
326
326
size_t size ;
327
327
328
328
if (stream -> buf ) {
329
- size = MAX (stream -> buf_size * 2 , needed );
329
+ size = MIN ( zlog_limit , MAX (stream -> buf_size * 2 , needed ) );
330
330
buf = realloc (stream -> buf , size );
331
331
} else {
332
- size = MAX (stream -> buf_size , needed );
332
+ size = MIN ( zlog_limit , MAX (stream -> buf_size , needed ) );
333
333
buf = malloc (size );
334
334
}
335
335
@@ -352,24 +352,61 @@ inline static zlog_bool zlog_stream_buf_alloc(struct zlog_stream *stream) /* {{
352
352
353
353
static ssize_t zlog_stream_buf_append (struct zlog_stream * stream , const char * str , size_t len ) /* {{{ */
354
354
{
355
- if (stream -> buf_size - stream -> buf_len <= len && !zlog_stream_buf_alloc_ex (stream , len )) {
355
+ int finished = 0 ;
356
+
357
+ if (stream -> finished ) {
358
+ return 0 ;
359
+ }
360
+
361
+ if (stream -> len + len > zlog_limit ) {
362
+ stream -> finished = finished = 1 ;
363
+ len = zlog_limit - stream -> len ;
364
+ }
365
+
366
+ if (stream -> buf_size - stream -> len <= len && !zlog_stream_buf_alloc_ex (stream , len )) {
356
367
return -1 ;
357
368
}
358
369
359
370
memcpy (stream -> buf , str , len );
360
- stream -> buf_len += len ;
371
+ stream -> len += len ;
372
+
373
+ if (finished ) {
374
+ stream -> len = zlog_truncate_buf (stream -> buf , stream -> len );
375
+ }
361
376
362
377
return len ;
363
378
}
364
379
365
- static inline size_t zlog_stream_write (struct zlog_stream * stream , const char * buf , size_t len ) /* {{{ */
380
+ static inline ssize_t zlog_stream_write (struct zlog_stream * stream , const char * buf , size_t len ) /* {{{ */
366
381
{
382
+ int finished = 0 ;
383
+ const char * append ;
384
+ size_t append_len ;
385
+
386
+ if (stream -> finished ) {
387
+ return 0 ;
388
+ }
389
+
390
+ if (stream -> len + len >= zlog_limit ) {
391
+ stream -> finished = finished = 1 ;
392
+ append = (stream -> len + len == zlog_limit ) ? "\n" : "...\n" ;
393
+ append_len = sizeof (append ) - 1 ;
394
+ len = zlog_limit - stream -> len - append_len ;
395
+ }
396
+
367
397
if (stream -> use_fd ) {
368
- zend_quiet_write (zlog_fd > -1 ? zlog_fd : STDERR_FILENO , buf , len );
398
+ int write_fd = zlog_fd > -1 ? zlog_fd : STDERR_FILENO ;
399
+ zend_quiet_write (write_fd , buf , len );
400
+ if (finished ) {
401
+ zend_quiet_write (write_fd , append , append_len );
402
+ }
369
403
}
370
404
371
405
if (stream -> use_stderr ) {
372
406
zend_quiet_write (STDERR_FILENO , buf , len );
407
+ if (finished ) {
408
+ zend_quiet_write (STDERR_FILENO , append , append_len );
409
+ }
373
410
}
374
411
375
412
return len ;
@@ -409,7 +446,7 @@ ssize_t zlog_stream_prefix_ex(struct zlog_stream *stream, const char *function,
409
446
return -1 ;
410
447
}
411
448
len = zlog_buf_prefix (function , line , stream -> flags , stream -> buf , stream -> buf_size );
412
- stream -> buf_len = stream -> prefix_len = len ;
449
+ stream -> len = stream -> prefix_len = len ;
413
450
return len ;
414
451
} else {
415
452
char sbuf [1024 ];
@@ -466,12 +503,12 @@ zlog_bool zlog_stream_finish(struct zlog_stream *stream) /* {{{ */
466
503
if (stream -> use_buffer ) {
467
504
#ifdef HAVE_SYSLOG_H
468
505
if (zlog_fd == ZLOG_SYSLOG ) {
469
- stream -> buf [stream -> buf_len ] = '\0' ;
506
+ stream -> buf [stream -> len ] = '\0' ;
470
507
php_syslog (syslog_priorities [zlog_level ], "%s" , stream -> buf );
471
508
}
472
509
#endif
473
- stream -> buf [stream -> buf_len ++ ] = '\n' ;
474
- zlog_stream_write (stream , stream -> buf , stream -> buf_len );
510
+ stream -> buf [stream -> len ++ ] = '\n' ;
511
+ zlog_stream_write (stream , stream -> buf , stream -> len );
475
512
} else {
476
513
zlog_stream_write (stream , "\n" , 1 );
477
514
}
0 commit comments