Rotor Control window displays with missing knob(s) and crashes when tracking.

Ouverte Adaptée aux débutants
#352 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
Moins d'une heure
Accessibilité débutants
60/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
À l'abandon
Stack technique
c
Domaine
desktop

Piste de recherche

Le bogue se trouve dans la fonction gtk_rot_knob_update, où le tampon local b est dimensionné trop petit pour la sortie de g_ascii_formatd et pour la boucle des étiquettes de chiffres. Commence par comparer la taille du tampon, la largeur de format passée à g_ascii_formatd et la borne de la boucle, puis vérifie que les indices des étiquettes correspondent toujours à knob->digits. C'est terminé lorsque les boutons Az et El apparaissent à l'ouverture de Rotor Control et continuent de se mettre à jour pendant le suivi, sans dépassement de tampon.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

I am new to GPredict and wanted a new compile (post 3.2.37) in order to avoid wrap around tracking. I followed directions for installing MSYS2 and with only minor fussing was able to compile for windows. The program appears generally in good order (some config defaults seem off). The main issue is that when I open Rotor Control, the Az/El knobs don't show up (Az is always missing, El is usually missing). I've tracked this down to the length of the b[7] array definition, which I believe should be 8. Just to be extra safe I set it to b[9] (not familiar with g_ascii_formatd and termination etc.) and it appears to work as intended on initial opening and tracking updates.

static void gtk_rot_knob_update(GtkRotKnob * knob)
{
    gchar           b[7];  //<-------- Here
    gchar          *buff;
    guint           i;

    g_ascii_formatd(b, 8, "%6.2f", fabs(knob->value));

    /* set label markups */
    for (i = 0; i < 6; i++)
    {
        buff = g_strdup_printf(FMTSTR, b[i]);
        gtk_label_set_markup(GTK_LABEL(knob->digits[i + 1]), buff);
        g_free(buff);
    }

    if (knob->value < 0)
        buff = g_strdup_printf(FMTSTR, '-');
    else
        buff = g_strdup_printf(FMTSTR, ' ');

    gtk_label_set_markup(GTK_LABEL(knob->digits[0]), buff);
    g_free(buff);
}
Langage dominant
C
Étoiles
1.2k
Forks
305
Merge moyen
4 j 14 h
PR mergées (30 j)
7

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de csete/gpredict

Toutes les issues de csete/gpredict

Issues similaires

Plus d'issues C

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.