
Recherche avancée
Médias (1)
-
The Slip - Artworks
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Texte
Autres articles (66)
-
ANNEXE : Les plugins utilisés spécifiquement pour la ferme
5 mars 2010, parLe site central/maître de la ferme a besoin d’utiliser plusieurs plugins supplémentaires vis à vis des canaux pour son bon fonctionnement. le plugin Gestion de la mutualisation ; le plugin inscription3 pour gérer les inscriptions et les demandes de création d’instance de mutualisation dès l’inscription des utilisateurs ; le plugin verifier qui fournit une API de vérification des champs (utilisé par inscription3) ; le plugin champs extras v2 nécessité par inscription3 (...)
-
MediaSPIP Player : problèmes potentiels
22 février 2011, parLe lecteur ne fonctionne pas sur Internet Explorer
Sur Internet Explorer (8 et 7 au moins), le plugin utilise le lecteur Flash flowplayer pour lire vidéos et son. Si le lecteur ne semble pas fonctionner, cela peut venir de la configuration du mod_deflate d’Apache.
Si dans la configuration de ce module Apache vous avez une ligne qui ressemble à la suivante, essayez de la supprimer ou de la commenter pour voir si le lecteur fonctionne correctement : /** * GeSHi (C) 2004 - 2007 Nigel McNie, (...) -
Submit bugs and patches
13 avril 2011Unfortunately a software is never perfect.
If you think you have found a bug, report it using our ticket system. Please to help us to fix it by providing the following information : the browser you are using, including the exact version as precise an explanation as possible of the problem if possible, the steps taken resulting in the problem a link to the site / page in question
If you think you have solved the bug, fill in a ticket and attach to it a corrective patch.
You may also (...)
Sur d’autres sites (9847)
-
Anomalie #2776 : sélecteur de rubrique
2 mars 2021, par cedric -J’avais complété le commit avec https://git.spip.net/spip/spip/commit/70e3624c61a44afa34b77ec9459710b3b3ab5b69 car il manquait en effet une partie, mais là je viens de retester en 3.3 à jour de la branche master et tout marche bien :
- je prends un auteur admin
- je fais modifier
- j’ajoute 2 rubriques
- j’enregistreEt j’ai bien les 2 rubriques qui apparaissent sur sa page auteur, et les liens sont là aussi dans la table spip_auteurs_liens.
-
Anomalie #3620 : Token de prévisualisation inconsistant selon que l’article est en cours de rédact...
12 février 2017, par Jacques BouthierJ’ai aussi des soucis avec cette fonction de prévisualisation. Comme elle n’avait jamais fonctionné correctement j’avais rajouté dans mes_options.php
define(’_PREVIEW_TOKEN’, true) ;
Et du coup ça fonctionnait, mais que pour les articles en statut "proposé à la publication".Après discussion avec Rastapopoulos sur IRC j’ai désactivé le plugin mini-minibando, et dans un article en prévisualisation alors est apparu le bouton "Relecture temporaire" parmi les boutons d’admin.
Et lorsqu’on clique sur ce bouton relecture temporaire ça génère bien un token.
Mais l’url générée avec ce token est en 404.
Et b_b semble bien avoir raison puisque si je désactive aussi le plugin bonux je n’ai plus ce bouton "Relecture temporaire"En ce qui me concerne je constate bien un problème (SPIP 3.2, php 7.06) ou tout au moins on pourrait améliorer le fonctionnement général...
-
`free() : invalid next size (normal)` after loading some frames of some videos using ffmpeg libs
17 septembre 2024, par rakivohere is the function :


uint8_t *load_first_frame(const char *file_path, AVFrame **frame)
{
 int ret;
 AVFormatContext *format_ctx = NULL;
 if ((ret = avformat_open_input(&format_ctx, file_path, NULL, NULL)) < 0) {
 eprintf("could not open input file\n");
 return NULL;
 }

 if ((ret = avformat_find_stream_info(format_ctx, NULL)) < 0) {
 eprintf("could not find stream info\n");
 avformat_close_input(&format_ctx);
 return NULL;
 }

 int stream_idx = -1;
 for (unsigned int i = 0; i < format_ctx->nb_streams; i++) {
 if (format_ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
 stream_idx = i;
 break;
 }
 }

 if (stream_idx == -1) {
 eprintf("could not find video stream\n");
 avformat_close_input(&format_ctx);
 return NULL;
 }

 AVCodecParameters *codec_par = format_ctx->streams[stream_idx]->codecpar;
 const AVCodec *codec = avcodec_find_decoder(codec_par->codec_id);
 if (!codec) {
 eprintf("could not find decoder\n");
 avformat_close_input(&format_ctx);
 return NULL;
 }

 AVCodecContext *codec_ctx = avcodec_alloc_context3(codec);
 if ((ret = avcodec_parameters_to_context(codec_ctx, codec_par)) < 0) {
 eprintf("could not copy codec parameters to context\n");
 avformat_close_input(&format_ctx);
 avcodec_free_context(&codec_ctx);
 return NULL;
 }

 if ((ret = avcodec_open2(codec_ctx, codec, NULL)) < 0) {
 eprintf("could not open codec\n");
 avformat_close_input(&format_ctx);
 avcodec_free_context(&codec_ctx);
 return NULL;
 }

 AVPacket *packet = av_packet_alloc();
 uint8_t *rgb_buffer = NULL;
 while (av_read_frame(format_ctx, packet) >= 0) {
 if (packet->stream_index != stream_idx) {
 av_packet_unref(packet);
 continue;
 }

 if (avcodec_send_packet(codec_ctx, packet) != 0) {
 av_packet_unref(packet);
 continue;
 }

 ret = avcodec_receive_frame(codec_ctx, *frame);
 if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
 av_packet_unref(packet);
 continue;
 } else if (ret < 0) {
 eprintf("error receiving frame: %d\n", ret);
 av_packet_unref(packet);
 av_packet_free(&packet);
 avformat_close_input(&format_ctx);
 avcodec_free_context(&codec_ctx);
 return NULL;
 }

 struct SwsContext *sws_ctx = sws_getContext(
 (*frame)->width, (*frame)->height, codec_ctx->pix_fmt,
 (*frame)->width, (*frame)->height, AV_PIX_FMT_RGB24,
 SWS_BILINEAR, NULL, NULL, NULL
 );

 if (!sws_ctx) {
 eprintf("failed to create SwsContext\n");
 av_packet_unref(packet);
 av_packet_free(&packet);
 av_frame_free(frame);
 avformat_close_input(&format_ctx);
 avcodec_free_context(&codec_ctx);
 return NULL;
 }

 int rgb_buffer_size = av_image_get_buffer_size(AV_PIX_FMT_RGB24, (*frame)->width, (*frame)->height, 1);
 if (rgb_buffer_size < 0) {
 eprintf("could not get buffer size\n");
 sws_freeContext(sws_ctx);
 av_packet_unref(packet);
 av_packet_free(&packet);
 av_frame_free(frame);
 avformat_close_input(&format_ctx);
 avcodec_free_context(&codec_ctx);
 return NULL;
 }

 rgb_buffer = (uint8_t *) malloc(rgb_buffer_size);
 if (rgb_buffer == NULL) {
 eprintf("failed to allocate RGB buffer\n");
 sws_freeContext(sws_ctx);
 av_packet_unref(packet);
 av_packet_free(&packet);
 avformat_close_input(&format_ctx);
 av_frame_free(frame);
 avcodec_free_context(&codec_ctx);
 return NULL;
 }

 uint8_t *dst[4] = {rgb_buffer, NULL, NULL, NULL};
 int dst_linesize[4] = {0};
 av_image_fill_linesizes(dst_linesize, AV_PIX_FMT_RGB24, (*frame)->width);

 sws_scale(sws_ctx,
 (const uint8_t *const *)(*frame)->data,
 (*frame)->linesize,
 0,
 (*frame)->height,
 dst,
 dst_linesize);

 sws_freeContext(sws_ctx);
 av_packet_unref(packet);
 break;
 }

 av_packet_unref(packet);
 av_packet_free(&packet);
 avformat_close_input(&format_ctx);
 avcodec_free_context(&codec_ctx);

 return rgb_buffer;
}



It loads up first frames of mp4s. The problem is that it works only first 7 times, and then, on 8th call of the showed function
malloc(): corrupted top size
happens. Specifically when callavcodec_send_packet
in thewhile
loop. Executing program usingvalgrind
outputs that :

==21777== Invalid write of size 8
==21777== at 0x7426956: ??? (in /usr/lib/libswscale.so.8.1.100)
==21777== by 0x18497CBF: ???
==21777== by 0x35E3AD3F: ???
==21777== Address 0x37f563f0 is 0 bytes after a block of size 2,194,560 alloc'd
==21777== at 0x48447A8: malloc (vg_replace_malloc.c:446)
==21777== by 0x1113CB: load_first_frame (main.c:503)
==21777== by 0x111995: draw_preview (main.c:605)
==21777== by 0x111E7F: render_files (main.c:672)
==21777== by 0x11209E: main (main.c:704)
==21777==
==21777== Invalid write of size 8
==21777== at 0x742695B: ??? (in /usr/lib/libswscale.so.8.1.100)
==21777== by 0x18497CBF: ???
==21777== by 0x35E3AD3F: ???
==21777== Address 0x37f563f8 is 8 bytes after a block of size 2,194,560 alloc'd
==21777== at 0x48447A8: malloc (vg_replace_malloc.c:446)
==21777== by 0x1113CB: load_first_frame (main.c:503)
==21777== by 0x111995: draw_preview (main.c:605)
==21777== by 0x111E7F: render_files (main.c:672)
==21777== by 0x11209E: main (main.c:704)
==21777==
==21777== Invalid write of size 8
==21777== at 0x7426956: ??? (in /usr/lib/libswscale.so.8.1.100)
==21777== by 0x183FE37F: ???
==21777== by 0x185D16FF: ???
==21777== Address 0x389b94e0 is 0 bytes after a block of size 943,200 alloc'd
==21777== at 0x48447A8: malloc (vg_replace_malloc.c:446)
==21777== by 0x1113CB: load_first_frame (main.c:503)
==21777== by 0x111995: draw_preview (main.c:605)
==21777== by 0x111E7F: render_files (main.c:672)
==21777== by 0x11209E: main (main.c:704)



The 503th line is :
rgb_buffer = (uint8_t *) malloc(rgb_buffer_size);
.

Apparently, I double freed something somewhere, but I can't see where exactly.
AVFrame **frame
that is passed to the function is allocated and freed properly every time usingav_frame_alloc
andav_frame_free
. The mp4 file fromfile_path
is always just a normal video, and it always exists.

I've tried loading up different mp4 files, the crash happens every time exactly on 8th call of the function