Usually Curve operators calls ED_curve_editnurb_load and ED_curve_editnurb_make which creates another cu->nurb and free the old one.
But the old cu->nurb may be being referenced by a PyObject (type pyrna_prop_collection_Type with pointer inited in rna_Curve_splines_begin).
This can lead to crash or other nasty problems since RNA_POINTER_INVALIDATE(nu_ptr) is not called.
The idea of this patch is not to free the cu->nurb and editnurb->nurbs pointers.
How this patch solves the problem:
Although not used, the BKE_nurbList_duplicate logic is duplicated in ED_curve_editnurb_load and ED_curve_editnurb_make (with minor differences).
Basically these functions copy the ListBase of nurbs.
But to copy, the old nurb is always freed and a new one is allocated.
This patch changes the behavior of BKE_nurbList_duplicate to reuse pointers, and deduplicates the code in` ED_curve_editnurb_load` and ED_curve_editnurb_make by using that BKE function.