[RTEMS Project] #4834: close_editor problem of RTEMS4.13/5.1 (cloned)

RTEMS trac trac at rtems.org
Mon Jan 30 03:43:51 UTC 2023


#4834: close_editor problem of RTEMS4.13/5.1 (cloned)
----------------------------+-------------------------
  Reporter:  chenjin_zhong  |      Owner:  Chris Johns
      Type:  defect         |     Status:  assigned
  Priority:  normal         |  Milestone:  6.1
 Component:  shell          |    Version:  6
  Severity:  normal         |   Keywords:
Blocked By:                 |   Blocking:
----------------------------+-------------------------
 Cloned from #4564:
 ----
 Hi, I find when close editor in shell console.some errors will occur. I
 check and analyse the source code of medit.c. the code fragment is listed
 as follows.

    #if defined(__rtems__)
         case ctrl('w'): ed = ed->env->current; close_editor(ed); break;
    #else
         case ctrl('w'): close_editor(ed); ed = ed->env->current; break;
    #endif

   static void close_editor(struct editor *ed) {
    struct env *env = ed->env;
    if (ed->dirty) {
      display_message(ed, "Close %s without saving changes (y/n)? ",
 ed->filename);
      if (!ask()) {
        ed->refresh = 1;
        return;
      }
    }

    delete_editor(ed);

    ed = env->current;
    if (!ed) {
      ed = create_editor(env);
      new_file(ed, "");
    }
    ed->refresh = 1;
   }


  static void delete_editor(struct editor *ed) {
    if (ed->next == ed) {
      ed->env->current = NULL;
    } else {
      ed->env->current = ed->prev;
    }
    ed->next->prev = ed->prev;
    ed->prev->next = ed->next;
    if (ed->start) free(ed->start);
      clear_undo(ed);
     ** free(ed);**
    }

 as seen above, if the macro **__rtems__** is defined. the delete_editor
 function will free **ed** pointer. Therefore, after the next loop, the
 **ed** is an invalid pointer.I have checked the code of
 https://github.com/ringgaard/sanos/blob/master/src/utils/edit/edit.c. the
 code is as follows.
    **case ctrl('w'): close_editor(ed); ed = ed->env->current; break;**

--
Ticket URL: <http://devel.rtems.org/ticket/4834>
RTEMS Project <http://www.rtems.org/>
RTEMS Project


More information about the bugs mailing list